いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

findコマンドで特定の条件に合致するものを除外対象にする ( -prune )

関連記事

GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ

概要

以下、自分用のメモです。使いたいときによく忘れるのでここにメモメモ。。。

findコマンドで、特定の条件にマッチするものを検索結果から除外したい場合がたまにあります。

その場合、findコマンドを実行して、その後にgrepコマンドで除外しても良いのですが、-prune オプションを使って以下のようにも出来ます。

find . -path 除外したいディレクトリパターン -prune -o -name '検索条件' -print

または

find . -name '除外したいパターン' -prune -o -name '検索条件' -print

一つ目は、 -path オプションを使って、マッチしたディレクトリごと除外対象にしています。2つ目はパターンにマッチしたファイルなりディレクトリを除外しています。

試してみた

try-golang という、私個人のリポジトリがあるのですが、Goのファイルがたくさんあります。

ディレクトリは以下のようになっています。

$ tree -d -L 1 .
.
├── builder
├── cmd
├── examples
├── mapping
└── runner

5 directories

examples ディレクトリに、ほとんどのGoファイルが存在しています。

$ find . -name '*.go' -print | wc -l
914

$ find examples -name '*.go' -print | wc -l
895

この状態で、ルートディレクトリから検索するのだけど、examples ディレクトリの下は除外対象として検索する場合は以下のようにします。

$ find . -path ./examples -prune -o -name '*.go' -print | wc -l
19

$ find . -path ./examples -prune -o -name '*.go' -print
./builder/builder.go
./builder/builder_test.go
./builder/doc.go
./cmd/args.go
./cmd/root.go
./main.go
./mapping/doc.go
./mapping/register.go
./mapping/types.go
./mapping/types_test.go
./runner/errs.go
./runner/exec.go
./runner/exec_test.go
./runner/export_test.go
./runner/loop.go
./runner/loop_test.go
./runner/once.go
./runner/once_test.go
./runner/runner.go

ちゃんと除外されてますね。

参考情報

ja.manpages.org


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。