目次
概要
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 の後ろにつく\; と + の違い | 雑廉堂の雑記帳 🔗
以上。