【发布时间】:2015-05-21 00:00:32
【问题描述】:
考虑以下命令来查找和更新特定目录中的所有 git 存储库:
find . -type d -name .git | while read src_dir; do
my_git_update "${1}";
done;
假设一个 repo 不能包含其他 repo,因此深入该目录是没有意义的。我没有使用子模块等,所以嵌套案例不计入这个问题。所以总的来说...
有没有办法告诉find 在找到匹配项后停止递归到目录中?
根据我的搜索,答案可能在于-prune,但我无法确切知道如何在我的情况下使用它。
Unix 'find' without descending into matched directories 不是重复,尽管有标题。它侧重于删除子目录 - 该解决方案不适用于此处。
【问题讨论】:
-
如果你不能让 find 做你想要的,“递归查找 .git 直到找到”并不难在 Perl 中作为伪单行器编写。
-
@ThorbjørnRavnAndersen 没错,我通常使用 ruby 或 perl 脚本。这个问题更倾向于好奇心,带有便携性和极简主义的暗示:)
-
据我所知,最初的发现并不支持你在这里需要的东西,所以如果你发现一个魔法咒语,你可能会发现它只适用于某些系统而不是全部。例如,OS X 更倾向于 BSD,而 Linux 更倾向于 GNU,因此高级脚本需要额外考虑才能在所有系统上运行的情况并不少见。
标签: git bash unix recursion find