サイトアイコン IT NEWS

Linuxで更新日が一定期間を経過した古いファイルを一括削除する

linux-find-mtime-delete

例えば、Linuxでログやバックアップを毎日取得し続け、ある程度日数が経過して不要になったファイル削除したい場合、毎日手動でするのは手間がかかります。
そこで、一定期間以上経過した古いファイル一括自動的削除する方法をご紹介します!

n日経過したファイルを削除

例として、最終更新日が3日以上経過したログファイル(.log)を一括削除したいと思います。
今回使用するLinuxコマンドはたった1つ。findのみです!
まずは、findコマンドを使用して、特定のディレクトリからn日経過したファイルを検索します。

findでファイルを検索

findの基本的な使い方はこちら。
検索対象のディレクトリパスとファイル名を指定します。

# find [ディレクトリパス] -name '[ファイル名]' <オプション>...

ファイル名にワイルドカードを使用して、特定のディレクトリパスに存在する拡張子が[.log]のファイルを検索します。

# find /path/to/ -name '*.log'

n日経過を指定するオプション

n日経過は[-mtime]オプションで指定します。
今回の例では3日なので[+3]としていますが、符号が[+]か[-]、または無しでは意味が異なりますので注意してください。

# find /path/to/ -name '*.log' -mtime +3

こちらのタイムスタンプに関するオプションは、最終更新日だけでなく、最終アクセス日やファイルの作成日、それから日指定だけでなく分指定することもできます。

オプション概要
-mminファイルのデータが最後に修正された日時(分指定)
-mtimeファイルのデータが最後に修正された日時(日指定)
-aminファイルのデータに最後にアクセスされた日時(分指定)
-atimeファイルのデータに最後にアクセスされた日時(日指定)
-cminファイルのデータとステータスが最後に修正された日時(分指定)
-ctimeファイルのデータとステータスが最後に修正された日時(日指定)
引用:findコマンドのmtimeオプションまとめ – Qiita

ファイルを削除するオプション

findコマンドで検索したファイルを削除する場合は、[-delete]オプションを使用します。
それでは、最終的に完成したコマンドがこちらになります!

# find /path/to/ -name '*.log' -mtime +3 -delete

巷では、パイプ(|)してxargsやrmと併用している情報が多いですが、findオプションだけで実現する方がとてもスマートです。

後は上記のコマンドcronで定期的に実行してしまえば、自動的に古いファイルを一括削除してくれるという訳です。
お疲れ様でした!

モバイルバージョンを終了