【ファインド】

find とは?

💡 パソコンの中を隅々まで探し回る、ファイル捜索のスペシャリスト
📌 このページのポイント
find — ディレクトリを再帰的に検索 ディレクトリツリー /project/ src/ app.log main.py logs/ error.log access.log コマンド find /project -name "*.log" .logファイルを全階層から検索 検索結果 /project/src/app.log /project/logs/error.log /project/logs/access.log -name 名前で検索 -size サイズで検索 -mtime 更新日で検索 -type 種類で検索 -exec 結果にコマンド実行
findのイメージ
ひよこ ひよこ

findコマンドって、ファイルを探すだけのコマンドなの?

ペンギン先生 ペンギン先生

「探す」がメインだけど、ただ探すだけじゃないんだよ。名前、サイズ、更新日、権限など色々な条件でファイルを絞り込めて、さらに見つけたファイルに対してコマンドを実行することもできるんだ

ひよこ ひよこ

たとえばどんなふうに使うの?

ペンギン先生 ペンギン先生

よくある例だと `find . -name "*.log"` で今いるディレクトリ以下のすべてのログファイルを見つけられるよ。`find /tmp -mtime +7 -delete` なら「7日以上前の一時ファイルを削除」なんてこともできるんだ

ひよこ ひよこ

grepとは何が違うの?

ペンギン先生 ペンギン先生

grepは「ファイルの中身」を検索するコマンドで、findは「ファイル自体」を検索するコマンドだよ。「この名前のファイルどこにあったっけ?」がfind、「この文字列が書いてあるファイルどれ?」がgrepだね

ひよこ ひよこ

-exec っていうオプションが難しそうなんだけど...

ペンギン先生 ペンギン先生

-exec は見つけたファイル1つ1つにコマンドを実行するオプションだよ。find . -name "*.txt" -exec wc -l {} で全テキストファイルの行数を数えられる。{} がファイル名に置き換わるんだね

ひよこ ひよこ

findが遅いって聞いたことがあるけど、速くする方法はあるの?

ペンギン先生 ペンギン先生

findはディレクトリを1つずつたどるから、ファイル数が多いと確かに遅くなるよ。最近は `fd` というRust製の高速な代替ツールも人気だね。あと、findの `-maxdepth` で探索の深さを制限したり、`-prune` で特定ディレクトリをスキップすると速くなるよ。locateコマンドのようにインデックスを事前に作っておく方法もあるんだ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「find」って出てきたら「条件を指定してファイルを探し出すコマンド」と思えればだいたいOK!
📖 おまけ:英語の意味
「find」 = 見つける
💬 そのまま英語の「見つける」という意味だよ。シンプルな名前だけど、オプションの豊富さは圧倒的なんだ
← 用語集にもどる