Обычно я использую этот стиль команд для запуска grep
нескольких файлов:
find / -xdev -type f -print0 | xargs -0 grep -H "800x600"
На самом деле это составляет список всех файлов в системе, а затем для каждого файла выполняется grep
с заданными аргументами и именем каждого файла.
-xdev
Аргумент говорит находке , что он должен игнорировать другие файловые системы - это хорошо для избежания специальных файловых систем , таких как /proc
. Однако он также будет игнорировать обычные файловые системы - поэтому, если, например, ваша папка / home находится в другом разделе, она не будет искать - вам нужно будет сказать find / /home -xdev ...
.
-type f
означает поиск только файлов, поэтому каталоги, устройства и другие специальные файлы игнорируются (он все равно будет преобразовываться в каталоги и выполняться grep
в файлах внутри - он просто не будет выполняться grep
в самом каталоге, что в любом случае не будет работать). И -H
опция grep
сказать ему всегда печатать имя файла в его выводе.
find
принимает все виды опций для фильтрации списка файлов. Например, -name '*.txt'
обрабатывает только файлы, заканчивающиеся на .txt. -size -2M
означает файлы размером менее 2 мегабайт. -mtime -5
означает файлы, измененные за последние пять дней. Объедините их вместе с -a for и и -o for или и используйте '('
скобки ')'
для группировки выражений (в кавычках, чтобы оболочка не могла их интерпретировать). Так, например:
find / -xdev '(' -type f -a -name '*.txt' -a -size -2M -a -mtime -5 ')' -print0 | xargs -0 grep -H "800x600"
Взгляните, man find
чтобы увидеть полный список возможных фильтров.
Permission denied
ошибок? Вы запускали его как root или обычный пользователь?