Uma das minhas práticas comuns é executar greps em todos os arquivos de um determinado tipo, por exemplo, encontrar todos os arquivos HTML que contenham a palavra "zaragato". Para fazer isso, eu uso
find /path/to -name "*.html" | xargs grep -l "rumpus"
Ocasionalmente, find
retornará um arquivo com um espaço em seu nome, como my new file.html
. Quando xargs
passado isso para grep
, no entanto, eu recebo estes erros:
grep: /path/to/bad/file/my: No such file or directory
grep: new: No such file or directory
grep: file.html: No such file or directory
Eu posso ver o que está acontecendo aqui: o pipe ou o xargs
está tratando os espaços como delimitadores entre os arquivos. Pela minha vida, no entanto, não consigo descobrir como evitar esse comportamento. Isso pode ser feito com find
+ xargs
? Ou tenho que usar um comando totalmente diferente?
Se as versões find e xarg em seu sistema não suportarem
-print0
e-0
alternar (por exemplo, AIX find e xargs), você poderá usar isso:Aqui o sed cuidará de escapar dos espaços para xargs.
fonte
find
todos novamente.