Как найти все файлы с одинаковым расширением в каталоге параллельно

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

Другие вопросы по тегам