Antes de tudo, verifique se você está usando aspas ASCII regulares como "
e '
(códigos ASCII 0x22
e 0x27
, respectivamente) em scripts de shell, porque o exemplo na sua postagem contém caracteres de aspas não padrão. Se você olhar de perto, eles parecerão um pouco diferentes. Provavelmente, esse é um erro de copiar e colar de um formato de documento rich text como Word, OOWriter ou até mesmo uma janela do navegador.
Como você está em um Mac, provavelmente possui a implementação do FreeBSD sed
, nesse caso você deve escrever o comando desta maneira:
find . -name "*.java" -exec sed -i '' s/foo/bar/g {} +
(aqui usando em +
vez de \;
para evitar a execução de uma sed
chamada por arquivo).
Na implementação do FreeBSD, sed
a -i
flag precisa de um argumento: a extensão de um arquivo de backup. Por exemplo, com -i .bak
o comando faria um backup file1.txt
como file1.txt.bak
primeiro antes de realizar a substituição do arquivo original. Usar um argumento vazio ''
significa não usar um arquivo de backup, que parece ser o que você deseja.
O mesmo na implementação do GNU (ou NetBSD, OpenBSD, busybox) seria:
find . -name "*.java" -exec sed -i s/foo/bar/g {} +
Obrigado @bahamat e @Mikel e @ pieter-breed por melhorar minha resposta com seus comentários.
-exec
e tudo depois dele? Ele imprime os nomes dos arquivos Java? (Eu estou preocupado que você está usando aspas inteligentes em vez de aspas ASCII.)