使用find执行一系列命令

使用find执行一系列命令

我想检查一个目录并为每个匹配的文件夹执行命令。以下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

相关内容