Linuxのサーバ上で特定の日付より前に作成されたファイルを一括で削除したり移動したりしたい時がある。え、ない? いやいや、まれにあるんだなこれが。
例えば、自動起動スクリプトにMTAを登録していなくて、かつてサーバを再起動した時点から自動発報メールが未送信のままspoolに溜まっていた場合など、MTA再起動したらqueueに溜まったメールが怒涛のように送信されてウギャーっとなる前に「もうこの日より前のメールはいらないや…」と選別できた時とかである(ものすごく具体的な例なのは実体験だから…(笑))。
$ cd /var/spool/clientmqueue
$ ls -la
-rw-rw---- 1 apache smmsp 984 12月 24 11:12 qfsBO2CNSF013462
-rw-rw---- 1 apache smmsp 984 12月 25 11:04 qfsBP24NJi007741
-rw-rw---- 1 apache smmsp 984 12月 26 11:07 qfsBQ27TE6002185
-rw-rw---- 1 apache smmsp 984 12月 27 12:09 qfsBR39wPr029964
-rw-rw---- 1 apache smmsp 984 12月 28 11:51 qfsBS2pRxg023695
-rw-rw---- 1 apache smmsp 984 12月 29 11:26 qfsBT2QOTX017228
-rw-rw---- 1 apache smmsp 984 12月 30 11:08 qfsBU28X9Q010897
-rw-rw---- 1 apache smmsp 984 12月 31 11:26 qfsBV2Qu7n005217
-rw-rw---- 1 apache smmsp 982 1月 1 12:30 qft013UbkP032693
-rw-rw---- 1 apache smmsp 982 1月 2 11:31 qft022VEKx025596
-rw-rw---- 1 apache smmsp 982 1月 3 11:33 qft032X1RJ019618
-rw-rw---- 1 apache smmsp 982 1月 4 11:21 qft042LROG013417
-rw-rw---- 1 apache smmsp 982 1月 5 11:04 qft0524bSc007230
-rw-rw---- 1 apache smmsp 982 1月 6 11:06 qft0626N90001781
-rw-rw---- 1 apache smmsp 982 1月 7 11:07 qft0727hF3028772
-rw-rw---- 1 apache smmsp 982 1月 8 11:04 qft0824NQZ023074
↑こんな感じにメールキューに未送信メールが一杯あるんだけど、もう1月1日より前のファイルはいらないや!──とかいう時がまれにある。
そんな時、ファイルのタイムスタンプを判断して、そのファイルのタイムスタンプより以前(そのファイルも含まれるので注意!)のファイルを一括で削除できると楽なんだが、そんな便利なオプションがrm
にはない。なので、find
とチェーンしてやってみた。
$ find \! -newer qfsBV2Qu7n005217|sort|less|xargs ls -la
find
の-newer
オプションの引数はタイムスタンプを判定したいファイル名である。まず ls
で試してみると、見事に12月31日のファイル「qfsBV2Qu7n005217
」を含む それ以前 のファイルの一覧が表示された。もし それ以降 のファイルを対象にしたければ、\!
の否定オプションを付けなければいい。
では、早速削除してみる。
$ find \! -newer qfsBV2Qu7n005217|sort|less|xargs rm
$ ls -la
-rw-rw---- 1 apache smmsp 982 1月 1 12:30 qft013UbkP032693
-rw-rw---- 1 apache smmsp 982 1月 2 11:31 qft022VEKx025596
-rw-rw---- 1 apache smmsp 982 1月 3 11:33 qft032X1RJ019618
-rw-rw---- 1 apache smmsp 982 1月 4 11:21 qft042LROG013417
-rw-rw---- 1 apache smmsp 982 1月 5 11:04 qft0524bSc007230
-rw-rw---- 1 apache smmsp 982 1月 6 11:06 qft0626N90001781
-rw-rw---- 1 apache smmsp 982 1月 7 11:07 qft0727hF3028772
-rw-rw---- 1 apache smmsp 982 1月 8 11:04 qft0824NQZ023074
バッチリ、12月31日以前のファイルがすべて消えました。あとはMTAを起動してqueueに残ってるメールをすべて送信させれば、spoolもきれいさっぱりになる次第。
まぁ、サーバ再起動したらミドルウェアの起動状況をちゃんと確認しておけよ──ということですな、はいその通りです(汗)