Как найти все файлы с одинаковым расширением в каталоге параллельно
Я хочу grep файлы с определенным расширением. Я знаю, как это сделать, используя команду find в качестве удара:
find . -type f -name "*.pptx"
Мне интересно, могу ли я выполнить вышеупомянутую команду параллельно (используя больше процессоров).
Спасибо!
1 ответ
Решение
find
-ception:
find . -maxdepth 1 -mindepth 1 -type d -print0 | xargs -0 -L1 -P0 -i find {} -type f -name '*.pptx'
find . -maxdepth 1 -type f -name '*.pptx'
-maxdepth 1
-mindepth 1
ограничивает поиск непосредственным содержимым каталога. Смотрим все подкаталоги (-type d
).- Тогда мы используем
xargs
бежатьfind
на всех подкаталогах.-0
в комбинации с-print0
заботится о любых специальных символах, которые могут встречаться в именах файлов. -P0
говоритxargs
бежать как можно большеfind
как можно параллельно. Вы можете ограничить его для запуска не более N процессов, используя-PN
,- Наконец, так как мы бежали
find
по всем подкаталогам мы наконец запускаемfind
также в текущем каталоге (и только в текущем каталоге - следовательно,-maxdepth 1
).
Слово предостережения: find
вероятно, будет интенсивным вводом-выводом. Вы можете получить столько преимуществ от параллельного запуска нескольких экземпляров.
Кроме того, выход многих find
Они могут смешиваться, что снижает полезность этого подхода.