我有一个问题;1) 我正在使用 find 命令查找目录;2) 我需要在之前找到的目录中执行另一个 find 命令。我想要类似这样的内容find . -type d -not -name bad | xargs find {0} *
是否有可能以某种方式告诉 xargs 将上一个命令输出 {0} 的结果放在哪里。
我找到了一个使用 -exec 而不是 xargs 命令的解决方案:
find . -type d -not -name bad -exec find {} -name '*' \;
但我个人更喜欢 xargs,可以用 xargs 做那件事吗?
答案1
如果我正确理解了你的要求,你最好做类似的事情:
find . -type d | grep -i <bad> | xargs -i find {} -type f
管道通过grep
更多的是个人偏好 - 您可以继续使用参数来find
排除您不感兴趣的目录。这里的关键是-i
切换到xargs
并使用{}
而不是{0}
。
答案2
find
+xargs
而不使用-print0
可能会很危险。原因如下:http://en.wikipedia.org/wiki/Xargs#The_separator_problem
您可能希望使用 GNU Parallel:
find . -type d | grep -i <bad> | parallel find {} -type f