Shell

每月刪除除最新備份文件之外的所有文件

  • October 8, 2015

我有一個目錄,其中包含許多每週生成的文件,其名稱如下

db_20130101_foo.tgz
db_20130108_foo.tgz
db_20130115_foo.tgz
...

等等。多年來,磁碟將變得非常滿。由於文件包含數週的數據,我們可以刪除較舊的文件。我想刪除每個文件,但始終保留每個月的最後一個文件。我如何能夠做到這一點,而不必手動將文件名複製和粘貼到 rm,這需要大量的工作並且很容易出錯?

此 oneliner 將為您提供要刪除的文件:

(ls -1 db_*_foo.tgz; 迴聲) | awk ‘{prevym=ym; 上一個文件=文件;ym=substr( $ 0,4,6); file= $ 0; if (ym==prevym)print prevfile}’

第一部分僅列出所有文件(並在列表末尾添加一個額外的行,以簡化後面的 awk 命令)。該awk部分僅檢查每一行以查看ym(年月)是否從一行更改為下一行。

測試並確保上面列出了您要刪除的文件。然後,要刪除所有文件,只需將命令輸入:

…ABOVE_COMMAND… | xargs rm

引用自:https://unix.stackexchange.com/questions/234819