関連記事
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
ちゃんと除外されてますね。
参考情報
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。