如何并行查找目录中具有相同扩展名的所有文件

如何并行查找目录中具有相同扩展名的所有文件

我想 grep 具有特定扩展名的文件。我知道如何使用 find 命令来做到这一点,如下所示:

find . -type f -name "*.pptx"

我想知道我是否可以在平行线(使用更多 CPU)。

谢谢!

答案1

find- 观念:

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)。
  • 然后我们使用xargsfind在所有子目录上运行。-0结合-print0处理文件名中可能出现的任何特殊字符。
  • -P0指示xargs并行运行尽可能多的finds。您可以使用 限制它最多运行 N 个进程-PN
  • 最后,由于我们已经find在所有子目录上运行了,我们最终也在当前目录上运行了find(并且仅在当前目录上运行了 - 因此-maxdepth 1)。

需要注意的是:find可能会占用大量 IO。并行运行多个实例所能获得的好处是有限的。
此外,许多 s 的输出find可能会混杂在一起,从而降低此方法的实用性。

相关内容