晴耕雨読

work in the field in fine weather and stay at home reading when it is wet

findコマンドで特定のディレクトリを検索対象から除外する

gitレポジトリを含むディレクトリで、findコマンドを使うと、 .git/ 以下のファイルに検索が入って実行速度に影響する場合があるので、 shellのfindコマンドで、特定のディレクトリを検索対象から除外する方法について

-not -path を使う

特定のディレクトリを検索対象から除外するには-not -path <path>を書けば良い。

find . -name "*" -not -path ".git/*"

もし、カレントディレクトリがgitレポジトリではない場合は、 gitレポジトリまでのパスを明示的に示すか、ワイルドカードを.gitの前に置けば良い。

find . -name "*" -not -path "path/to/repo/.git/*"
find . -name "*" -not -path "*/.git/*"

また、-not!に置き換えることもできる

find . -name "*" ! -path "*/.git/*"