У меня возникла немного странная проблема.
Если я запущу:
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 {} +