Я зазвичай використовую цей стиль команди для запуску 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 або звичайний користувач?