.git
ファイルを含むすべてのパスを除いて、すべてのgitサブモジュールを除外しながら、フォルダ内のすべてのディレクトリを再帰的に見つけようとします。どうすればいいですか?
説明する:
.git
ファイルは各サブモジュールフォルダのルートディレクトリにあります。このサブモジュールフォルダはどこにでも含めることができます。
テストケース
$ mkdir Test
$ cd Test
$ mkdir a
$ mkdir b
$ mkdir c
$ cd a
$ mkdir .git
$ cd ..
$ cd b
$ touch .git
$ cd ..
$ cd c
$ mkdir c1
$ mkdir c2
$ cd..
$ find . -type d \( \( ! -name . -exec [ -e {}/.git ] \; -prune \) -o \( \( \
-name .git\
-o -name .vscode\
-o -name node_modules\
-o -name Image\
-o -name Rendered\
-o -name iNotebook\
-o -name GeneratedTest\
-o -name GeneratedOutput\
\) -prune \) -o -print \) | sort
期待されるパフォーマンス
.
./a
./c
./c/c1
./c/c2
ベストアンサー1
find
タスクもテストなので、以下を使用してテストを追加できます-exec
。
find . \( -exec [ -f {}/.git ] \; -prune \) -o \( -name .git -prune \) -o -print
これは3つのワークセットに適用されます。
-exec [ -f {}/.git ] \; -prune
次の名前のファイルを含むディレクトリのクリーンアップ.git
-name .git -prune
指定されたディレクトリをクリーンアップします.git
(したがって、コマンドは.git
リポジトリのホームディレクトリ内で検索されません)。-print
上記で取り込まれていない内容を印刷します。
ディレクトリのみを一致させるには、-type d
before-print
または(ファイル処理時間を節約するため)を追加します。
find . -type d \( \( -exec [ -f {}/.git ] \; -prune \) -o \( -name .git -prune \) -o -print \)
.
find
これは、次のディレクトリ以外でこのコマンドを実行するときにも機能します。
find /some/other/path -type d \( \( -exec [ -f {}/.git ] \; -prune \) -o \( -name .git -prune \) -o -print \)