find -print0 | xargs -0 grep не работает должным образом в Ubuntu 10.04

find -print0 | xargs -0 grep не работает должным образом в Ubuntu 10.04

У меня возникла немного странная проблема.

Если я запущу:

find . -iname '*.php' -o -iname '*.pl' -o -iname '*.html' | xargs grep -i users

Я получаю кучу ошибок для имен файлов, содержащих пробелы, но некоторые файлы совпадают.

Однако если я попробую сделать следующее, чтобы имена файлов с пробелами обрабатывались правильно, совпадений не будет:

find . -iname '*.php' -o -iname '*.pl' -o -iname '*.html' -print0 | xargs -0 grep -i users

Что я делаю не так? Вторая команда должна вернуть мне как минимум те же совпадающие файлы, что и первая, но я не получаю никаких совпадений.

решение1

И ответ таков:

find . \( -iname '*.php' -o -iname '*.pl' -o -iname '*.html' \) -print0 | xargs -r0 grep -i users

Это работает. Я раньше этого не видел, но мне об этом рассказал коллега.

решение2

Вам не нужны print0 и xargs, эта функциональность уже встроена в find:

find . -iname "*.php" -o -iname "*.pl" -o -iname "*.html" -exec grep -i users {} + 

Связанный контент