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