![使用find执行一系列命令](https://linux22.com/image/16649/%E4%BD%BF%E7%94%A8find%E6%89%A7%E8%A1%8C%E4%B8%80%E7%B3%BB%E5%88%97%E5%91%BD%E4%BB%A4.png)
我想检查一个目录并为每个匹配的文件夹执行命令。以下find
正确返回我正在查找的列表。
find . -maxdepth 1 -name "*.bitbucket"
对于返回的每个项目,我想执行命令:
hg pull --update --repository [FIND_RESULT_HERE]
有没有一种简单的方法可以使用 find 和 xargs 来做到这一点?如果没有,最好的选择是什么。
答案1
使用该-exec
选项,find
如下所示:
find . -maxdepth 1 -name "*.bitbucket" -exec hg pull --update --repository {} \;
gets{}
替换为查找结果,\;
终止符表示它们应该一次执行一个。 A+
会导致一堆它们作为参数串在一起。
答案2
find . -maxdepth 1 -name "*.bitbucket" -execdir hg pull --update --repository {} +
将并行处理多个文件。并非每个查找都可能有 -execdir; Gnu/find 建议使用它来避免错误。
答案3
@Caleb 的回答很好。或者你可以用 来做到这一点xargs
。
如果您想对每个查找结果执行 hg 操作,(正如 @Caleb 指出的那样,)
find . -depth 1 -name "*.bitbucket" | xargs -n1 hg pull --update --repository
如果要将所有查找结果累积到一个命令中,请删除-n1
.
另外,要小心-depth
。该选项不使用任何参数。我想你的意思是-maxdepth
。