例えば、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コマンドで検索したファイルを削除する場合は、[-delete]オプションを使用します。
それでは、最終的に完成したコマンドがこちらになります!
# find /path/to/ -name '*.log' -mtime +3 -delete
巷では、パイプ(|)してxargsやrmと併用している情報が多いですが、findのオプションだけで実現する方がとてもスマートです。
後は上記のコマンドをcronで定期的に実行してしまえば、自動的に古いファイルを一括削除してくれるという訳です。
お疲れ様でした!
- Original:https://minory.org/linux-find-mtime-delete.html
- Source:Minory
- Author:管理者