「あのファイル、どこに置いたっけ」——ディレクトリを ls で辿りながら探すのは、地味に時間を取られます。
そんなときに手が覚えておくと強いのが find コマンドです。
名前・種類・サイズ・更新日といった条件を並べるだけで、ディレクトリの奥まで一気に探してくれます。
この記事では、私が普段よく使う find の形を、そのままコピペで試せる粒度でまとめてみました。
findの基本形

find の基本形はとてもシンプルです。
「どこを起点に」「何を条件に」探すかを並べるだけ、と考えると迷いません。
たとえばカレントディレクトリ以下から拡張子が txt のファイルを探すなら、こう書きます。
find . -name "*.txt"
先頭の . は「今いるディレクトリ」を指しています。
ここを /var/log などに変えれば、探す起点をそのまま切り替えられるのです。
名前で探す(-name / -iname)
いちばん出番が多いのは、名前で探す -name です。
ワイルドカードの * を使えば、部分一致でまとめて拾えます。
# 拡張子が log のファイル
find . -name "*.log"
# readme で始まるファイル(大文字小文字を無視)
find . -iname "readme*"
大文字小文字を区別したくないときは、-name の代わりに -iname を使います。
* はシェルに先へ展開されないよう、必ずクォートで囲むのがコツです。
このクォートを忘れると、狙ったファイルが見つからず戸惑うことになります。
種類・サイズ・更新日で絞る
名前だけでは絞りきれないときは、条件を足していきましょう。
-type f はファイル、-type d はディレクトリだけに限定する指定です。
# 10MB より大きいファイル
find /var/log -type f -size +10M
# 7日以内に更新されたファイル
find . -type f -mtime -7
-size +10M は「10MB より大きい」、-mtime -7 は「7日以内」という意味になります。
数字の前の + と – で「以上・以内」が反転する点だけ、最初は戸惑いやすいところです。
見つけたファイルに操作する(-exec)

find の便利さが際立つのは、見つけたファイルへそのまま操作を流せるところにあります。
-exec を使うと、マッチした一つひとつにコマンドを実行できるのです。
# 一時ファイルをまとめて削除
find . -name "*.tmp" -delete
# js の中で TODO を含むファイルだけ一覧
find . -name "*.js" -exec grep -l "TODO" {} +
{} はマッチしたファイル名に置き換わる部分で、末尾の + はまとめて渡す指定です。
ここで find は「場所とファイルの絞り込み」、grep は「中身の検索」と役割を分けると、ログ調査やコード検索がぐっと速くなります。
-delete は取り消せないので、まず付けずに結果を確認してから実行するのが安全です。
つまずきポイント
最後に、私がよく踏んだつまずきを3つ挙げておきます。
- * をクォートで囲み忘れて、シェルが先に展開してしまう
- 起点の . を付け忘れて、パスを丸ごと打ってしまう
- -delete や -exec rm を、結果を確認せずに走らせてしまう
どれも一度やらかすと体で覚えるので、最初だけ気をつければ大丈夫です。
最後に
find は覚える条件こそ多いものの、よく使うのは -name・-type・-mtime・-exec の4つくらい。
まずはこの4つをコピペで試して、手に馴染ませてみてください。
以上です。









コメントを残す