使用shell命令从目录中删除旧备份

时间:2014-06-18 11:55:54

标签: linux shell unix awk crontab

在我的shell脚本中,我正在创建我的文件夹的备份。我正在通过cronjob设置此活动,并且时间表不断变化。

它使用时间戳保留备份。喜欢例如:

cd / tmp / BACKUP_DIR

backup_06-05-2014.tar
backup_06-08-2014.tar
backup_06-10-2014.tar

我想要的是,每当我运行脚本时,它应该保留最新的和以前采用的备份。并删除剩余的备份。

就像我现在运行脚本一样,它应该保持

backup_06-10-2014.tar
backup_06-18-2014.tar

并删除所有其他的。我应该使用rm命令?

3 个答案:

答案 0 :(得分:5)

尝试如下:

rm $(ls -1t /tmp/BACKUP_DIR | tail -n +2)

列表按文件的日期名称排序,只剩下两个最新的

答案 1 :(得分:3)

您可以尝试使用find命令删除7天以前的文件,例如:

find /tmp/BACKUP_DIR -maxdepth 1 -type f -name "backup_*.tar" -mtime +6 -exec rm -f {} \;

答案 2 :(得分:0)

使用

rm -rf `ls -lth backup_*.tar | awk '{print $NF}' | tail -n +4`
  1. ls -lth backup _ * .tar将提供备份文件的排序列表(最新位于顶部)
  2. awk'{print $ NF}'将打印文件名并将其传递给尾部
  3. tail -n +4,将打印3号文件
  4. 最后尾部的结果被送到rm行动
  5. 另一种简化方法

    rm -rf `ls -1rt backup_*.tar | tail -n +3`