Я бы идти о решении вашей проблемы по-другому. find
может находить определенные файлы в вашей файловой системе, а xargs
позволяет запускать команды по заданным входным файлам. Поэтому я хотел бы использовать команду:
find ./ -type f -print0 | xargs -0 -I{} -n1 -P4 grep -IP $REX '{}' >> result
Это будет искать, начиная с текущего каталога (./
) для всех обычных файлов (-type f
), и передавать их xargs
безопасно в случае, если есть какие-либо пробелы в имя файла (-print0
). xargs
, то для каждой команды запускается команда grep
. -I{}
сообщает xargs
, что там, где он видит {}
, он вставляет имя файла в команду. Здесь не обязательно, но хорошая практика. -0
идет рука об руку с -print0
от find
и говорит ему ожидать ввода таким образом. -P4
сообщает xargs
для одновременного запуска до 4 процессов, а -n1
, как описано в справочной странице, указывает на xargs
, чтобы использовать только один аргумент за один раз за команду.
Существуют различные настройки, которые вы можете сделать здесь, независимо от того, хотите ли вы искать все файлы или переходить только на сертианную глубину, но эта общая команда должна помочь вам начать с такого рода задач.
Почему бы не использовать 'find' и' xargs', чтобы найти все файлы, которые вам нужны, и обрабатывать их параллельно? –
или GNU или BSD 'parallel' – mkb