Linuxサーバ上で特定日付より前に作成されたファイルを一括で削除する

  • 10
    いいね
  • 1
    コメント
この記事は最終更新日から1年以上が経過しています。

 Linuxのサーバ上で特定の日付より前に作成されたファイルを一括で削除したり移動したりしたい時がある。え、ない? いやいや、まれにあるんだなこれが。

 例えば、自動起動スクリプトにMTAを登録していなくて、かつてサーバを再起動した時点から自動発報メールが未送信のままspoolに溜まっていた場合など、MTA再起動したらqueueに溜まったメールが怒涛のように送信されてウギャーっとなる前に「もうこの日より前のメールはいらないや…」と選別できた時とかである(ものすごく具体的な例なのは実体験だから…(笑))。

$ cd /var/spool/clientmqueue
$ ls -la
-rw-rw---- 1 apache smmsp     984 1224 11:12 qfsBO2CNSF013462
-rw-rw---- 1 apache smmsp     984 1225 11:04 qfsBP24NJi007741
-rw-rw---- 1 apache smmsp     984 1226 11:07 qfsBQ27TE6002185
-rw-rw---- 1 apache smmsp     984 1227 12:09 qfsBR39wPr029964
-rw-rw---- 1 apache smmsp     984 1228 11:51 qfsBS2pRxg023695
-rw-rw---- 1 apache smmsp     984 1229 11:26 qfsBT2QOTX017228
-rw-rw---- 1 apache smmsp     984 1230 11:08 qfsBU28X9Q010897
-rw-rw---- 1 apache smmsp     984 1231 11:26 qfsBV2Qu7n005217
-rw-rw---- 1 apache smmsp     982  11 12:30 qft013UbkP032693
-rw-rw---- 1 apache smmsp     982  12 11:31 qft022VEKx025596
-rw-rw---- 1 apache smmsp     982  13 11:33 qft032X1RJ019618
-rw-rw---- 1 apache smmsp     982  14 11:21 qft042LROG013417
-rw-rw---- 1 apache smmsp     982  15 11:04 qft0524bSc007230
-rw-rw---- 1 apache smmsp     982  16 11:06 qft0626N90001781
-rw-rw---- 1 apache smmsp     982  17 11:07 qft0727hF3028772
-rw-rw---- 1 apache smmsp     982  18 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  11 12:30 qft013UbkP032693
-rw-rw---- 1 apache smmsp     982  12 11:31 qft022VEKx025596
-rw-rw---- 1 apache smmsp     982  13 11:33 qft032X1RJ019618
-rw-rw---- 1 apache smmsp     982  14 11:21 qft042LROG013417
-rw-rw---- 1 apache smmsp     982  15 11:04 qft0524bSc007230
-rw-rw---- 1 apache smmsp     982  16 11:06 qft0626N90001781
-rw-rw---- 1 apache smmsp     982  17 11:07 qft0727hF3028772
-rw-rw---- 1 apache smmsp     982  18 11:04 qft0824NQZ023074

 バッチリ、12月31日以前のファイルがすべて消えました。あとはMTAを起動してqueueに残ってるメールをすべて送信させれば、spoolもきれいさっぱりになる次第。

まぁ、サーバ再起動したらミドルウェアの起動状況をちゃんと確認しておけよ──ということですな、はいその通りです(汗)