4

Я использую следующее для поиска строки во всех файлах в каталоге.

grep -Flr --include "*" 'mystring' /modules/

Который работает отлично нормально и возвращает файлы, которые содержат строку. Тем не менее, я также получаю список файлов с разрешением, запрещенным рядом с ними, что означает поиск результатов немного сложнее.

Есть ли флаг, который нужно передать команде, чтобы игнорировать выдачу разрешенных ошибок.

Спасибо

2 ответа2

3

Я обычно просто использую:

grep -Flr --include "*" 'mystring' /modules/ 2>/dev/null

который выбросит весь вывод в стандартную ошибку, при условии, что у вас есть оболочка, допускающая 2> стандартное перенаправление ошибок. Если нет, смотрите здесь.

Если (как вы, вероятно, указываете в своем комментарии), ваша версия grep выводит свои ошибки в стандартный вывод, а не в стандартную ошибку, вы можете отфильтровать этот вывод примерно так:

grep -Flr --include "*" 'mystring' /modules/ | egrep -v 'Permission denied|ERROR'

Это будет отбрасывать строки на основе того шаблона, который вы считаете необходимым.

0

Если вы используете BSD grep, используйте флаг -s ;

grep -Flrs --include "*" 'mystring' /modules/

Кроме того, я думаю, что вы можете удалить --include "*" потому что BSD grep читает каталоги по умолчанию и рекурсивно обращается к ним, если вы используете -r или -R .

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