我设置了日常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。
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)
files_to_delete=`ls -tr1 | tail -n+3`
rm $files_to_delete
-tr1
告诉ls command按照修改时间以相反的时间顺序列出文件,每个文件都在一行上。
tail -n+3
告诉tail command从第三行开始(跳过前两行)。>>如果您有10个以上的文件,则需要更复杂的解决方案,或者您需要多次运行。