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