更新日時を基準にファイルを検索したい

古いログファイルやバックアップファイルを整理する際、更新日時が指定日数より古い(または新しい)ファイルだけを検索したい場合がある。findコマンドの-mtimeオプションを使うと、更新日時を基準にファイルを検索できる。

次の4つのファイルがあるとする。

$ ls -l --time-style=long-iso
-rw-r--r-- 1 root root 0 2026-06-25 07:09 old_10days.log
-rw-r--r-- 1 root root 0 2026-06-30 07:09 old_5days.log
-rw-r--r-- 1 root root 0 2026-07-04 07:09 recent_1day.log
-rw-r--r-- 1 root root 0 2026-07-05 07:09 today.log

-mtime +N で指定日数より古いファイルを検索する

+Nを指定すると、更新日時がN日より古いファイルを検索する。

$ find . -type f -mtime +7
./old_10days.log

10日前に更新したold_10days.logのみが該当している。

-mtime -N で指定日数より新しいファイルを検索する

-Nを指定すると、更新日時がN日未満のファイルを検索する。

$ find . -type f -mtime -3
./recent_1day.log
./today.log

1日前と当日に更新した2つのファイルが該当している。

-mtime N で指定日数ちょうどのファイルを検索する

+-を付けずに数値のみを指定すると、更新日時がちょうどN日前(Nの24時間区間に該当するファイル)を検索する。

$ find . -type f -mtime 5
./old_5days.log

5日前に更新したold_5days.logのみが該当している。

-delete と組み合わせて古いファイルを削除する

-deleteオプションと組み合わせると、検索したファイルをそのまま削除できる。古いログファイルの自動削除に使う。

$ ls
old_10days.log old_5days.log recent_1day.log today.log

$ find . -type f -mtime +7 -delete

$ ls
old_5days.log recent_1day.log today.log

10日前に更新したold_10days.logのみが削除されている。-deleteは削除対象を確定してから実行する破壊的な操作のため、事前に-deleteを付けずに検索結果を確認してから実行するとよい。

用途

-mtimeは以下のような場面で役立つ。

  • N日以上前のログファイルを定期的に削除したい場合
  • 直近N日以内に変更されたファイルだけを抽出して調査したい場合
  • バックアップ対象を更新日時で絞り込みたい場合

ファイルサイズを基準に検索したい場合は【find -size】指定サイズ以上(以下)のファイルを検索する も参照。