.gitignoreにないファイルを探す

.gitignoreにないファイルを探す

プロジェクトのファイルを表示する find コマンドがあります。

find . -type f -not -path './node_modules*' -a -not -path '*.git*' \
       -a -not -path './coverage*' -a -not -path './bower_components*' \
       -a -not -name '*~'

.gitignoreのファイルが表示されないようにファイルをフィルタリングする方法は?

私は以下を使用していると思いました。

while read file; do
    grep $file .gitignore > /dev/null && echo $file;
done

ただし、.gitignoreファイルはglobパターンを持つことができます(ファイルが.gitignoreにある場合はパスとは機能しません)。 globがある可能性のあるパターンに基づいてファイルをフィルタリングするにはどうすればよいですか?

ベストアンサー1

git供給git-check-ignoreファイルが除外されていることを確認してください.gitignore

したがって、次のものを使用できます。

find . -type f -not -path './node_modules*' \
       -a -not -path '*.git*'               \
       -a -not -path './coverage*'          \
       -a -not -path './bower_components*'  \
       -a -not -name '*~'                   \
       -exec sh -c '
         for f do
           git check-ignore -q "$f" ||
           printf '%s\n' "$f"
         done
       ' find-sh {} +

スキャンはファイルごとに行われ、膨大な費用がかかります。

おすすめ記事