編集:問題を誤って伝えました。より正確な例を以下に示します。
ターゲットディレクトリ内のすべてのディレクトリを再帰的にウォークし、最初の.gitディレクトリが見つかった後で各再帰呼び出しを停止したいと思います。
たとえば、次のパスがある場合:
/home/code/Twitter/.git/
/home/code/Twitter/some_file
/home/code/Twitter/some_other_file
/home/code/facebook/.git/
/home/code/facebook/another_file
/home/code/configs/.git/
/home/code/configs/some_module/.git/
/home/code/configs/another_module/.git/
/home/code/some/unknown/depth/until/this/git/dir/.git/
/home/code/some/unknown/depth/until/this/git/dir/some_file
結果には次の行だけが必要です。
/home/code/Twitter
/home/code/facebook
/home/code/configs
/home/code/some/unknown/depth/until/this/git/dir/
-maxdepth
ターゲットの各サブディレクトリの最初の.gitディレクトリの深さがわからないため、ここでは役に立ちません。
find /home/code -type d -name .git -Prune
はそれをしますが、それは私にとってはうまくいきません。何が足りないのですか?
あなたが望むように聞こえます -maxdepth
オプション。
/ home/code -maxdepth 2 -type d -name.gitを検索します
.gitサブディレクトリを含むすべてのディレクトリを検索します。
find /home/code -type d -name .git -exec dirname {} \;
それはトリッキーであり、-maxdepthと再帰のトリッキーはここでは役に立ちませんが、これが私がすることです:
find /home/code -type d -name ".git" | grep -v '\.git/'
英語:「。git」という名前のすべてのディレクトリを見つけて、「。git /」(ドットgitスラッシュ)を含む結果リスト内の出現箇所をすべて除外します。
上記のコマンドラインはすべてのUNIXシステムで機能しますが、検索結果が「GNU検索」であると断言できる場合は、これも機能します。
find /home/code -type d -name ".git" ! -path "*/.git/*"
楽しんで。