findコマンドメモ

findコマンドたまにしか使わないけど、たまに遭遇するとやってることの意味がわからなくて毎回ググるのでよく使いそうなところだけメモ。ほぼmanすればわかることだが。

使い方

パス内のファイルを再帰的に列挙するコマンド。

find <パス> <オプション>

-typeオプション

検索するファイルのタイプを指定する。

例)

カレントディレクトリ以下の普通のファイルを全部列挙する

find . -type f

カレントディレクトリ以下のディレクトリを全部列挙する

find . -type d

ブロックデバイスファイルとかキャラクタデバイスファイルとかってなんだろうと思ったけど、 ここに解説が載っていた。

-maxdepthオプション

検索する階層の深さを指定する

例)

fooディレクトリから2階層下までのディレクトリを列挙する

find foo -type d -maxdepth 2

-nameオプション

検索するファイル名で絞り込みをする

例)

カレントディレクトリ以下のファイルの中で'bar'という文字を含む名前のファイルを列挙する

find . -name '*bar*'

まあでも「〇〇.phpどこあったっけ?」みたいな使い方であればlocate *.php | grep ◯◯ってやったほうが速い。

-execオプション

-execのあとにコマンド名を入力することで、findの結果をそのコマンドに引数として渡すことができる

例)

カレントディレクトリのファイル名出力全部の先頭に「おやつたべたい」を追加する

find ./* -type f -maxdepth 0 -exec echo 'おやつたべたい{}' ';'

-execで渡せるコマンドは複数可で、最後に';'か'+'を渡すことがコマンド終了の合図になってるらしい。{}はfindコマンドの結果。