find . -type f -print0 | xargs -0 grep -l -E 'some_regexp' > /tmp/list.of.files
Важные части:
- -type f делает список поиска только файлами
- -print0 печатает файлы, разделенные не \ n, а \ 0 - это здесь, чтобы убедиться, что это будет работать, если у вас есть файлы с пробелами в их именах
- xargs -0 - разбивает ввод на \ 0 и передает каждый элемент в качестве аргумента введенной вами команде (grep в этом примере)
Крутая вещь при использовании xargs заключается в том, что если в вашем каталоге действительно много файлов, вы можете ускорить процесс, распараллелив его:
find . -type f -print0 | xargs -0 -P 5 -L 100 grep -l -E 'some_regexp' > /tmp/list.of.files
При этом команда grep будет запускаться в 5 отдельных копиях, каждая из которых сканирует другой набор до 100 файлов