特定のファイルを含む除外パスを探す

特定のファイルを含む除外パスを探す

.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 dbefore-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 \)

おすすめ記事