更新日時を基準にファイルを検索したい
古いログファイルやバックアップファイルを整理する際、更新日時が指定日数より古い(または新しい)ファイルだけを検索したい場合がある。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】指定サイズ以上(以下)のファイルを検索する も参照。
\第一線のプログラマーの行動原理を学べる!/
