我想 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
)。- 然后我们使用
xargs
find
在所有子目录上运行。-0
结合-print0
处理文件名中可能出现的任何特殊字符。 -P0
指示xargs
并行运行尽可能多的find
s。您可以使用 限制它最多运行 N 个进程-PN
。- 最后,由于我们已经
find
在所有子目录上运行了,我们最终也在当前目录上运行了find
(并且仅在当前目录上运行了 - 因此-maxdepth 1
)。
需要注意的是:find
可能会占用大量 IO。并行运行多个实例所能获得的好处是有限的。
此外,许多 s 的输出find
可能会混杂在一起,从而降低此方法的实用性。