这就是我想做的
find . -maxdepth 1 -type d -print0 | xargs -0 -P4 find -name 'war' -type d
我想创建一个以 null 结尾的目录名称列表,然后将此列表传递给 xargs,xargs 对于每个目录名称调用 find 使用 4 个进程池。
我的问题是:如何在管道查找命令中访问标准输入?就像是
find <STDIN> -name 'war' -type d
答案1
Find 无法从标准输入读取其路径,您无法-
像许多其他程序一样指定。
我建议您使用 GNU Parallel 来并行运行:
find . -mindepth 1 -maxdepth 1 -type d -print0 | parallel -0 --jobs 4 \
find {} -name "war" -type d
请注意添加-mindepth 1
到第一个查找中。如果不包含该内容,当前目录 ( .
) 也将传递到其中一个查找结果中,并且您将获得双重结果。
$ mkdir a b c d e
$ mkdir b/war c/war
$ find . -mindepth 1 -maxdepth 1 -type d -print0 | parallel -0 --jobs 4 \
find {} -name "war" -type d
./b/war
./c/war
$ find . -maxdepth 1 -type d -print0 | parallel -0 --jobs 4 \
find {} -name "war" -type d
./c/war
./b/war
./c/war
./b/war
答案2
用这个:
find . -maxdepth 1 -type d -print0 |
xargs -0 -I {} -P4 find "{}" -name "war" -type d
更好的方法是排除.
路径:
find . -maxdepth 1 -not -path . -type d -print0 |
xargs -0 -I "{}" find "{}" -name "war" -type d