【发布时间】:2019-08-02 19:11:11
【问题描述】:
我有一台远程服务器,每天将 30 多个备份文件复制到本地服务器,当且仅当成功复制较新的备份时,我想删除旧备份。
使用我尝试的不同代码,我设法删除了旧文件,但我遇到的问题是,如果它找到一个新备份,它会删除所有旧文件。
我有类似的东西(用 20 个虚拟机想象一下):
vm001-2019-08-01.bck
vm001-2019-07-28.bck
vm002-2019-08-01.bck
vm003-2019-07-29.bck
vm004-2019-08-01.bck
vm004-2019-07-31.bck
vm004-2019-07-30.bck
vm004-2019-07-29.bck
...
我想删除所有内容,只保留最近的内容。 即:擦除:
vm001-2019-07-28.bck
vm002-2019-07-29.bck
vm004-2019-07-31.bck
vm004-2019-07-30.bck
vm004-2019-07-29.bck
并且只保留:
vm001-2019-08-01.bck
vm002-2019-08-01.bck
vm003-2019-07-29.bck
vm004-2019-08-01.bck
我遇到的问题是,如果我最近有任何机器的备份,像 vm-003-2019-07-29 这样的文件会被删除,因为它们比较旧,即使它们来自不同的机器。
我知道网站上有这个问题的几个变体,但我不能完全解决这个问题。
我一直在尝试这段代码的变体:
#!/bin/bash
for i in ./*.bck
do
echo "found" "$i"
if [[ -n $(find "$i" -type f -mmin -1440) ]]
then
echo "$i"
find "$i" -type f -mmin +1440 -exec rm -f "$i" {} +
fi
done
(回显仅用于调试目的)
此时,此代码会找到较新和较旧的文件,但不会删除任何内容。如果我输入find "$i" -type f -mmin +1440 -exec echo "$i" {} +,它永远不会打印任何东西,好像find $i 没有找到任何东西,但是当我在终端中将它作为单独命令运行时,它会打印(减去-exec 部分)。
我已经使用 touch -d 测试了这个脚本生成具有不同时间戳的文件,但我没有成功。
【问题讨论】: