У меня есть немного странная проблема.

Если я бегу:

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

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

2 ответа2

2

И ответ:

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

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

0

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .