Nunca incorpore {}
no código da shell! Isso cria uma vulnerabilidade de injeção de comando. Observe que, para cat "{}"
, não apenas os caracteres "
, \
, '
, $
também são um problema (considere, por exemplo, um arquivo chamado ./$(reboot)/accept_ra
).
(a propósito, algumas find
implementações ganham ' Deixe-o fazer isso, e POSIX deixa o comportamento não especificado quando {}
não está sozinho em um argumento para find
)
Aqui, você desejaria passar os nomes de arquivos como argumentos separados para sh
(não no argumento código ) e o script sh
inline (o código argumento) para se referir a eles usando parâmetros posicionais:
find . -name accept_ra -exec sh -c 'echo 0 > "$1"' sh {} \;
Ou para evitar a execução de um sh
por arquivo:
find . -name accept_ra -exec sh -c 'for file do
echo 0 > "$file"; done' sh {} +
Observe que o segundo sh
acima vai para o $0
do script embutido. Você deve usar algo relevante lá (como sh
ou find-sh
), não coisas como _
, -
, --
ou a sequência vazia, pois o valor em $0
é usado para as mensagens de erro da shell :
$ find . -name accept_ra -exec sh -c 'echo 0 > "$1"' inline-sh {} \;
inline-sh: ./accept_ra: Permission denied