Однією з моїх поширених практик є виконання файлів «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
? Або я повинен використовувати зовсім іншу команду?