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

linux-find-mtime-delete
  • URLをコピーしました!

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

目次

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

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

findでファイルを検索

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

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

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

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

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

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

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

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

巷では、パイプ(|)してxargsやrmと併用している情報が多いですが、findオプションだけで実現する方がとてもスマートです。
後は上記のコマンドcronで定期的に実行してしまえば、自動的に古いファイルを一括削除してくれるという訳です。

【おまけ】0時を起点にする

上記のコマンドでは、実行した時点から3日(72時間)以上のファイル削除しますが、コマンドを実行した時間に関係なく、必ず0時を起点としてn日前を指定したい場合は、[-daystart]オプションを利用します。

これで、シェル等の処理時間に差があったとしても、同じ条件で一括削除することができますね!
お疲れ様でした!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次