Как найти все файлы с одинаковым расширением в каталоге параллельно
Я хочу 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 Они могут смешиваться, что снижает полезность этого подхода.