find -mtimeオプションを完全解説!初心者でもわかる更新日でファイルを検索する方法
生徒
「Linuxで、最近変更されたファイルだけを探す方法ってありますか?」
先生
「はい、それにはfindコマンドの-mtimeオプションを使うと便利ですよ。」
生徒
「その-mtimeって何を意味してるんですか?」
先生
「-mtimeはファイルが最後に更新(修正)された日数を基準に検索できるオプションです。それでは、詳しく説明していきましょう!」
1. findコマンドとは?
findコマンドは、Linuxでファイルやディレクトリを検索するためのコマンドです。検索の条件として、ファイル名やサイズ、所有者、更新日時など、さまざまな項目を指定できます。
今回はその中でも更新日を基準に検索する方法に注目します。更新日とは、ファイルが最後に修正された日を指します。
2. -mtimeオプションとは?
-mtimeは、ファイルの更新日から何日経過したかを基準に検索できるオプションです。
たとえば、以下のような使い方ができます。
-mtime 0→ 今日変更されたファイル-mtime 1→ 昨日変更されたファイル-mtime -3→ 過去3日以内に変更されたファイル-mtime +7→ 1週間以上前に変更されたファイル
数値の前に付く記号には意味があります:
- +(プラス):より古い(指定日数より前)
- -(マイナス):より新しい(指定日数以内)
- 数値だけ:ちょうどその日数前
3. 実際のコマンド例
それでは、実際に-mtimeオプションを使ってみましょう。以下のコマンドは、カレントディレクトリ(現在のフォルダ)以下で、過去1日以内に変更されたファイルを探します。
find . -mtime -1
./report.txt
./data/update.log
「.」は、現在のディレクトリを意味します。
4. -type f を併用してファイルだけを検索
ディレクトリ(フォルダ)も含まれてしまうのを避けたいときは、-type fを使いましょう。fは「file(ファイル)」の略です。
find . -type f -mtime -2
./memo.txt
./logs/error.log
このようにすると、2日以内に更新されたファイルのみが表示されます。
5. -mtimeと他のオプションの組み合わせ
-mtimeは、他のオプションと組み合わせて、さらに細かく検索することができます。たとえば、特定の拡張子を持つファイルだけを探すには-nameと組み合わせます。
find . -type f -name "*.log" -mtime -7
./logs/system.log
./logs/error.log
この例では、「*.log」というログファイルで、7日以内に更新されたものを探しています。
6. -mtimeと-secondsの違い
-mtimeは「24時間単位」で計算されます。そのため、例えば-mtime 1は「24〜48時間前に更新されたファイル」になります。
「もっと細かく、例えば3時間前に変更されたファイルを探したい」と思ったときは、-mmin(分単位)を使います。
find . -type f -mmin -180
./recent.txt
このコマンドは180分(3時間)以内に更新されたファイルを探します。
7. よくある疑問と注意点
Q. ディレクトリも結果に含まれてしまうんですが?
→ -type fをつけましょう。これでファイルのみに絞れます。
Q. 日付ではなく「何時間前」とかで指定できないの?
→ -mtimeではなく-mminを使うことで、分単位の時間指定が可能です。
Q. 何も表示されないんですが?
→ 該当するファイルがない可能性があります。まずtouchコマンドでテスト用ファイルを作って確認してみましょう。
8. ファイルの更新日時を確認するには?
検索する前に、ファイルの更新日時を確認してみましょう。ls -lで表示できます。
ls -l sample.txt
-rw-r--r-- 1 user user 1024 Sep 16 09:30 sample.txt
この「Sep 16 09:30」が、最後に更新された日時です。
9. 実用例:3日以内に変更されたファイルのバックアップ
例えば「3日以内に変更されたファイルをバックアップフォルダへコピー」したい場合は、-mtimeと-execを組み合わせます。
find . -type f -mtime -3 -exec cp {} /backup \;
{}は見つかったファイル名を意味し、\;で-execの終了を示しています。