スポンサーリンク

findとgrepで拡張子で検索する

※MACターミナル(BSD系)での動作確認です。
例えば、.c ファイルを検索する場合は、下記のように書けますね。
参考:grepコマンドのor検索時には、正規表現の"|"の前にバックスラッシュ"\"が必要なので注意が必要(しばらく経つと忘れがち)

$ find . -type f | grep "\.c$"

下記のように、ディレクトリがあったとき、

$ tree
.
├── dir001
│   ├── dir
│   │   └── file3.c
│   └── file3.txt
└── dir002
    ├── dir
    │   └── file2.cpp
    ├── file1c
    └── file3.txt

4 directories, 5 files

下記が実行結果になります。
$ find . -type f | grep "\.c$"
./dir001/dir/file3.c

スポンサーリンク

拡張子の扱いは注意が必要

注意点としては、検索条件の "." の前にバックスラッシュを入れることと、
末尾に"$"を入れることに注意です。

$ find . -type f | grep "\.c$"

"$"を入れないと、末尾が .c で検索しようとしても、.cpp も検索されてしまいます。

"$"で末尾が c で終わることを指定する必要があります。

$ find . -type f | grep "\.c"
./dir001/dir/file3.c
./dir002/dir/file2.cpp

また、"."の前にバックスラッシュを入れないと、"."は任意の1文字を表します。

下記のように、末尾がcのバイナリファイルも検索されてしまいます。

$ find . -type f | grep ".c$"
./dir001/dir/file3.c
./dir002/file1c

スポンサーリンク