考虑以下命令来查找和更新特定目录中的所有git repos:
find . -type d -name .git | while read src_dir; do
my_git_update "${1}";
done;
假设一个repo不能包含其他repos,所以没有必要深入到该目录。我没有使用子模块等,所以嵌套的情况不计算这个问题。所以总的来说......
有没有办法让find
在找到匹配项后停止递归到目录?
根据我的搜索,答案可能在于-prune
,但我无法弄清楚如何在我的情况下使用它。
Unix 'find' without descending into matched directories 不 重复,尽管有标题。它侧重于删除子目录 - 该解决方案不适用于此。
答案 0 :(得分:0)
你是对的,答案是-prune
:
此主要内容始终评估为true。它导致找不到 下降到当前文件。请注意,
-prune
主要版本没有 如果指定了-d
选项,则会生效。
(-d
和-depth
在此特定find
中基本上是同义词。
与-print
比较:
此主要内容始终评估为true。它打印的路径名 当前文件到标准输出。
这意味着您以相同的方式使用它们:在测试先前的条件并确定您位于不应递归遍历的目录之后,只需-prune
它就可以继续前进到下一个目录。 (-d
使其无效的原因是-d
,find
代码已经运行了目录中的所有内容,因此继续前进的修剪步骤即将发生的事情无论如何。)