findコマンドの使い方:条件を指定してファイルを検索する

findは、名前・種類・サイズ・更新日時などの条件を指定して、ファイルやディレクトリを探すコマンドです。ディスクを圧迫している大きなファイルの特定や、古いログの削除対象の洗い出しに使います。

findのよく使う形

実務や学習で登場しやすい使い方を、そのまま入力できる形でまとめました。

コマンド例内容
find /var/log -name "*.log"/var/log配下から、名前が.logで終わるファイルを探す
find . -type fファイルだけを探す(-type dはディレクトリ)
find / -size +100M100MBを超えるファイルを探す
find /var/log -mtime +3030日より前に更新されたファイルを探す
find . -name "*.tmp" -delete見つかったファイルをその場で削除
find . -name "*.sh" -exec chmod +x {} \;見つかったファイルに別のコマンドを実行
find . -user alice所有者がaliceのファイルを探す

findの主なオプション

オプション意味
-name名前で検索
-iname大文字小文字を無視して検索
-typef・d 種別
-mtime更新日数
-sizeサイズ
-permパーミッション
-user所有者で検索
-exec見つけたファイルにコマンドを実行
-delete見つけたファイルを削除
-maxdepth探索する階層の深さを指定

findの実行例と結果の読み方

user@linux-study:~$ find . -name "*.log"
./var/log/app.log
./backup/old.log

find . -name "*.log"で、現在のディレクトリ以下(.)を再帰的に探索し、拡張子が.logのファイルをすべて見つけています。サブディレクトリの中にあるファイルも探し出せるのが特徴です。

練習用ターミナルでは、findをブラウザ上で安全に試せます。

findを使うときの注意点

-deleteや-exec rmを付ける前に、まず条件だけで実行して、対象が想定どおりか確認してください。条件の書き間違いで、消してはいけないファイルが対象になることがあります。

find / ...はルートから全体を探すため、時間がかかり、アクセスできない場所では「Permission denied」が多数出ます。エラーを消したいときは2>/dev/nullを付けます。

名前での検索だけなら、あらかじめ作ったデータベースを使うlocateのほうが高速です。ただし、最新の変更は反映されていないことがあります。

findに関するよくある質問

-mtime +30の意味は?

更新から30日より前、という意味です。-mtime -7なら直近7日以内、-mtime 0なら24時間以内です。

大文字小文字を区別せずに探すには?

-nameの代わりに-inameを使います。

関連ページ

あわせて覚えたいコマンド:grep・ls・du・rm

findが登場する章:中級 第8章

← Linuxコマンド一覧へ戻る