bash脚本删除以前的备份

问题描述 投票:0回答:3

我设置了日常cron作业来备份服务器。

在我的文件夹备份中,backup命令生成2个文件:存档本身.tar.gz和一个文件.info.json,如下所示:

-rw-r--r-- 1 root root     1617 Feb  2 16:17 20200202-161647.info.json
-rw-r--r-- 1 root root 48699726 Feb  2 16:17 20200202-161647.tar.gz
-rw-r--r-- 1 root root     1617 Feb  3 06:25 20200203-062501.info.json
-rw-r--r-- 1 root root 48737781 Feb  3 06:25 20200203-062501.tar.gz
-rw-r--r-- 1 root root     1618 Feb  4 06:25 20200204-062501.info.json
-rw-r--r-- 1 root root 48939569 Feb  4 06:25 20200204-062501.tar.gz

如何编写bash脚本,该脚本将仅保留最后2个存档,并删除所有其他备份(targ.gz和info.json)。

在此示例中,这意味着删除了20200204-062501.info.json和20200204-062501.tar.gz。

bash shell
3个回答
0
投票
在路径中找到两个最新文件:

most_recent_json=$(ls -t *.json | head -1) most_recent_tar_gz=$(ls -t *.tar.gz | head -1)

删除忽略所有其他内容的最新文件:

rm -i $(ls -I $most_recent_json -I $most_recent_tar_gz)


0
投票
假设您的文件少于10个,并且它们是成对创建的,那么您可以执行以下简单操作:

files_to_delete=`ls -tr1 | tail -n+3` rm $files_to_delete

-tr1告诉ls command按照修改时间以相反的时间顺序列出文件,每个文件都在一行上。

tail -n+3告诉tail command从第三行开始(跳过前两行)。>>

如果您有10个以上的文件,则需要更复杂的解决方案,或者您需要多次运行。


0
投票
如果自动删除会删除不需要的文件或引发意外错误,则可能会对您的心理状态造成危害。说您的示例中文件少于1 + 2。如果根本没有文件,请确保脚本不会失败。
© www.soinside.com 2019 - 2024. All rights reserved.