N日より前のファイルを削除するコマンド
概要
N日より前の特定のファイルを削除したいってシュチュエーションで使うコマンドです。
具体的には以下のシチュエーションです。
- logrotateが使えない
- ファイルはログファイル
- 出力元アプリが
application.log-YYYYMMDD
の様な形式で、YYYYMMDDの日付suffixが付く
アプリが自動でログローテートしてるのでサーバ側でlogrotateの設定は入れれません。
が、当該ログファイルの削除処理はどこにもないのでたまり続けます。といった具合。
コマンド
find /var/www/app/logs -name "application.log-*" -mtime +7 -exec rm -f {}\;
詳細
find -mtime
-mtime
で「最終更新日が7日以前のファイル」と指定する。
詳細は以下を参照のこと。
mtimeの時間範囲の計算がいまいち分かりづらかったので整理。
コマンド実行時点を0日目として、24時間前を1日目...Nという風に考える。
時間の端数は無視されるとのことなので、実行時点から24時間未満(1未満)は無視される。なので24時間前が1日前と言うカウント。
詳細は以下。
File was last accessed less than, more than or exactly n*24 hours ago. When find figures out how many 24-hour periods ago the file was last accessed, any fractional part is ignored, so to match -atime +1, a file has to have been accessed at least two days ago.
ローカルでの実験が以下の通り。当日分1世代+前日からの7世代を保持って感じになる。
$ date 2022年 10月10日 月曜日 23時01分48秒 JST $ ls -l total 0 -rw-r--r-- 1 z staff 0 9 27 21:00 application.log-20220927 -rw-r--r-- 1 z staff 0 9 28 21:00 application.log-20220928 -rw-r--r-- 1 z staff 0 9 29 21:00 application.log-20220929 -rw-r--r-- 1 z staff 0 9 30 21:00 application.log-20220930 -rw-r--r-- 1 z staff 0 10 1 21:00 application.log-20221001 -rw-r--r-- 1 z staff 0 10 2 21:00 application.log-20221002 -rw-r--r-- 1 z staff 0 10 3 21:00 application.log-20221003 -rw-r--r-- 1 z staff 0 10 4 21:00 application.log-20221004 -rw-r--r-- 1 z staff 0 10 5 21:00 application.log-20221005 -rw-r--r-- 1 z staff 0 10 6 21:00 application.log-20221006 -rw-r--r-- 1 z staff 0 10 7 21:00 application.log-20221007 -rw-r--r-- 1 z staff 0 10 8 21:00 application.log-20221008 -rw-r--r-- 1 z staff 0 10 9 21:00 application.log-20221009 -rw-r--r-- 1 z staff 0 10 10 21:00 application.log-20221010 $ find . -mtime +0 | sort ./application.log-20220927 ./application.log-20220928 ./application.log-20220929 ./application.log-20220930 ./application.log-20221001 ./application.log-20221002 ./application.log-20221003 ./application.log-20221004 ./application.log-20221005 ./application.log-20221006 ./application.log-20221007 ./application.log-20221008 ./application.log-20221009 $ find . -mtime +1 | sort ./application.log-20220927 ./application.log-20220928 ./application.log-20220929 ./application.log-20220930 ./application.log-20221001 ./application.log-20221002 ./application.log-20221003 ./application.log-20221004 ./application.log-20221005 ./application.log-20221006 ./application.log-20221007 ./application.log-20221008 $ find . -mtime +2 | sort ./application.log-20220927 ./application.log-20220928 ./application.log-20220929 ./application.log-20220930 ./application.log-20221001 ./application.log-20221002 ./application.log-20221003 ./application.log-20221004 ./application.log-20221005 ./application.log-20221006 ./application.log-20221007 $ find . -mtime +3 | sort ./application.log-20220927 ./application.log-20220928 ./application.log-20220929 ./application.log-20220930 ./application.log-20221001 ./application.log-20221002 ./application.log-20221003 ./application.log-20221004 ./application.log-20221005 ./application.log-20221006 $ find . -mtime +4 | sort ./application.log-20220927 ./application.log-20220928 ./application.log-20220929 ./application.log-20220930 ./application.log-20221001 ./application.log-20221002 ./application.log-20221003 ./application.log-20221004 ./application.log-20221005 $ find . -mtime +5 | sort ./application.log-20220927 ./application.log-20220928 ./application.log-20220929 ./application.log-20220930 ./application.log-20221001 ./application.log-20221002 ./application.log-20221003 ./application.log-20221004 $ find . -mtime +6 | sort ./application.log-20220927 ./application.log-20220928 ./application.log-20220929 ./application.log-20220930 ./application.log-20221001 ./application.log-20221002 ./application.log-20221003 $ find . -mtime +7 | sort ./application.log-20220927 ./application.log-20220928 ./application.log-20220929 ./application.log-20220930 ./application.log-20221001 ./application.log-20221002 $ find . -mtime +8 | sort ./application.log-20220927 ./application.log-20220928 ./application.log-20220929 ./application.log-20220930 ./application.log-20221001 $ find . -mtime +9 | sort ./application.log-20220927 ./application.log-20220928 ./application.log-20220929 ./application.log-20220930
以下のサイトが大変参考になりました。
【Linux】find コマンド【図解】 | 100%レンタルサーバーを使いこなすサイト
find -exec
-exec
で実行するコマンドを指定しているが、最後のエスケープとセミコロン(\;
)が肝。
execで渡したコマンドの終端を示す。
参考:find -exec の後ろにつく\; と + の違い | 雑廉堂の雑記帳
以上。