[Linux] Bashで一定件数以上のファイルを削除する

  • このエントリーをはてなブックマークに追加
  • LINEで送る

日次バッチなどを作っていると、例えばバックアップファイルは最新30件だけ保存し、それ以上古いファイルは削除したいといった気持ちになりますよね。そんな時に利用するのが次のワンライナー。

$ cd backup/
$ rm -f `ls -t . | tail -n+31`

これだと30日前の日付を計算して毎回削除するといった処理を書かなくて済みます。厳密にn日分確保する必要がある場合は日付の計算を行った方が良いでしょうが、念の為一定期間取っておきたいくらいのゆるい要件であれば十分でしょう。

  • 保存しておきたいファイル数に「+1」することをお忘れなく。
  • ディレクトリを削除する場合はrmに-rをつけてください。
- Sponsored Link -

オプションの意味

ls -t
ファイルの更新日でソートし、新しい物から順番に出力します(sort by modification time, newest first)
tail -n
ファイルの末尾から指定行数を出力します。-10なら最後の10行。-n+10ならファイルの先頭10行をスキップしそれ以降を出力せよという意味になります(output the last K lines, instead of the last 10; or use -n +K to output starting with the Kth)

参考

このブログを応援する

お寄せいただいたお気持ちは全額サーバ代や次の記事を執筆するための原資として活用させていただいております。この記事が参考になった場合などぜひご検討ください。

PayPal(ペイパル)
PayPalで500円支払う
※金額は任意で変更できます。
※100円でも泣いて喜びますw
※住所の入力欄が現れた場合は「no needed」を選択ください
これまでのご協力者さま
- Sponsored Link -

ご質問やリクエストなどお気軽に。メールアドレスの入力は任意です。書き込みが反映されるまで時間がかかります。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください