Как запустить find -exec?
Я хотел бы найти файлы в текущей директории, содержащей текст «chrome».
$ find . -exec grep chrome
find: missing argument to `-exec'
Что я делаю неправильно?
6 ответов
Вы пропустили ;
или +
и {}
:
find . -exec grep chrome {} \;
или
find . -exec grep chrome {} +
find
выполнит grep
и заменит {}
на найденные имена файлов. Разница между ;
и +
заключается в том, что с ;
выполняется одна команда grep
для каждого файла, тогда как с + как можно больше файлов в качестве параметров для +
сразу.
Вам вообще не нужно использовать find
; grep способен обрабатывать открытие файлов либо из списка всех объектов в текущем каталоге:
grep chrome *
... или даже рекурсивно для папки и всего под ней:
grep chrome . -R
find . | xargs grep 'chrome'
вы также можете сделать:
find . | xargs grep 'chrome' -ls
Первый показывает вам строки в файлах, второй - только список файлов.
Вариант Калеба более аккуратный, меньше нажатий клавиш.
Найти - один из способов, и вы можете попробовать the_silver_searcher
, тогда все, что вам нужно сделать, это
ag chrome
Он будет искать хром во всех файлах (включая вспомогательные каталоги) и быстрее, чем find
Чтобы просмотреть список файлов вместо строк:
grep -l "chrome" *
или
grep -r -l "chrome" .
Вот пример того, как обычно я использую find /exec ...
find . -name "*.py" -print -exec fgrep hello {} \;
Здесь выполняется поиск рекурсивно для всех .py-файлов и для каждого файл распечатает (-ы) имя файла и fgrep для 'hello' on что (для каждого) файла. Результат выглядит (просто побежал один сегодня):
./r1.py
./cgi-bin/tst1.py
print "hello"
./app/__init__.py
./app/views.py
./app/flask1.py
./run.py
./tst2.py
print "hello again"