Одна из моих общих практик - выполнять greps для всех файлов определенного типа, например, находить все файлы HTML, в которых есть слово «rumpus». Для этого я использую
find /path/to -name "*.html" | xargs grep -l "rumpus"
Иногда find
возвращает файл с пробелом в имени, например my new file.html
. Когда я xargs
передал это grep
, я получаю эти ошибки:
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
Я могу видеть, что здесь происходит: или канал, или xargs
трактует пространства как разделители между файлами. Впрочем, я не могу понять, как предотвратить такое поведение. Можно ли это сделать с помощью find
+ xargs
? Или я должен использовать совершенно другую команду?
Если версии find и xarg в вашей системе не поддерживают
-print0
и не-0
переключаются (например, AIX find и xargs), вы можете использовать это:Здесь sed позаботится о том, чтобы избежать пространства для xargs.
источник
find
их все снова.