findコマンドの使い方:条件を指定してファイルを検索する
findは、名前・種類・サイズ・更新日時などの条件を指定して、ファイルやディレクトリを探すコマンドです。ディスクを圧迫している大きなファイルの特定や、古いログの削除対象の洗い出しに使います。
findのよく使う形
実務や学習で登場しやすい使い方を、そのまま入力できる形でまとめました。
| コマンド例 | 内容 |
|---|---|
find /var/log -name "*.log" | /var/log配下から、名前が.logで終わるファイルを探す |
find . -type f | ファイルだけを探す(-type dはディレクトリ) |
find / -size +100M | 100MBを超えるファイルを探す |
find /var/log -mtime +30 | 30日より前に更新されたファイルを探す |
find . -name "*.tmp" -delete | 見つかったファイルをその場で削除 |
find . -name "*.sh" -exec chmod +x {} \; | 見つかったファイルに別のコマンドを実行 |
find . -user alice | 所有者がaliceのファイルを探す |
findの主なオプション
| オプション | 意味 |
|---|---|
-name | 名前で検索 |
-iname | 大文字小文字を無視して検索 |
-type | f・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を使います。
関連ページ
findが登場する章:中級 第8章