Рекурсия с Grep при игнорировании отсутствующих / нечитаемых файлов
Утилиты BSD и GNU grep имеют опции, которые могут избавить вас от хлопот, связанных с использованием find , xargs , и др. во многих случаях. Это один из тех. Например:
grep -Flrs "a1009206_vcr" . > file.log
Здесь используются следующие флаги:
-F, --fixed-strings
Интерпретировать шаблон как набор фиксированных строк (т.е. заставить grep вести себя как fgrep).
-l, --files-with-matches
В стандартный вывод выводятся только имена файлов, содержащих выбранные строки . grep будет искать файл только до тех пор, пока не будет найдено совпадение, что делает поиск потенциально менее затратным. Имена путей указываются один раз для каждого найденного файла. Если выполняется поиск в стандартном вводе, записывается строка `` (стандартный ввод) ''.
-R, -r, --recursive
Рекурсивный поиск в подкаталогах в списке.
-s, --no-messages
Бесшумный режим. Несуществующие и нечитаемые файлы игнорируются (т. Е. Их сообщения об ошибках подавляются).
для рекурсии вниз по текущему рабочему каталогу (например, .
или $PWD
, если вы предпочитаете ) и записать список имен файлов с совпадениями в file.log . Флаг -s
предотвращает засорение выходного файла ошибками разрешений или другим мусором. Вы также можете отключить стандартную ошибку с помощью 2>&-
, если хотите.
Предостережение: символические ссылки и рекурсия
Вышеупомянутый должен работать в большинстве случаев, но вам также может потребоваться добавить -O
или -p
, если вы повторяете и не хотите следовать некоторым или всем вашим символическим ссылкам. На странице руководства есть более подробные сведения о поведении grep по умолчанию в отношении символических ссылок, с рекурсией и без нее.