“missing argument to -exec
” geralmente significa que o argumento para - exec
está faltando seu terminador. O terminador deve ser um argumento contendo apenas o caractere ;
(que precisa ser citado em um comando shell, por isso, geralmente é escrito \;
ou ';'
) ou dois argumentos sucessivos contendo {}
e +
.
Stephane Chazelas identificou que você está usando um antigo versão do GNU que não suporta -exec … {} +
, apenas -exec {} \;
. Embora o GNU tenha adotado tardiamente o -exec … {} +
, recomendo que você adquira um conjunto de ferramentas menos antigo (como o Cygwin , que inclui git e muito mais, ou GNUwin32 , que não tem git, mas não tem o mau funcionário-tentando-de-usar- linux-but-we-impose-windows vibe que o Cygwin dá). Este recurso foi adicionado na versão 4.2.12, há mais de 9 anos (foi o último recurso identificado a tornar o GNU find
compatível com POSIX).
Se você quiser se ater a um GNU find mais antigo, você pode usar -print0
with xargs -0
para obter uma funcionalidade semelhante: a execução de comandos agrupados, suportando nomes de arquivos arbitrários.
find a/folder b/folder -name '*.c' -o -name '*.h' -print0 | xargs -0 grep -I foobar /dev/null
Sempre cite os curingas na linha de comando find
. Caso contrário, se você executar este comando a partir de um diretório contendo .c
files, o *.c
sem aspas seria expandido para a lista de .c
files no diretório atual.
Adicionar /dev/null
à linha de comando grep
é um truque para garantir que o grep sempre imprima o nome do arquivo, mesmo se find
encontrar uma única correspondência. Com o GNU find, outro método é passar a opção -H
.