我制作了这个简单的脚本:
#/bin/bash
DATE=$(date +"%d_%m_%Y-%H:%M:%S")
tar -czvf /kopie/bin-$DATE.tar /bin
DATE=$(date --date="2 hours ago" +"%d-%m-%Y_%H")
rm -f /kopie/bin-$DATE*.tar
我对脚本的最后一行有问题。 rm 命令不起作用,它不会删除文件。 “2 小时前”的日期效果很好,所以这不是问题。
答案1
您似乎以两种不同的方式指定文件名:
DATE=$(date --date="2 hours ago" +"%d-%m-%Y_%H")
上面,例如年和小时之间有一个_。
但您生成的日期具有不同的格式:
DATE=$(date +"%d_%m_%Y-%H:%M:%S")
然而,这仍然不能解决“约会”的固有问题。或多或少两小时前”,因为从 13:00:00 到 12:59:59 需要一秒钟,无论如何,这与“2017-11-20_13*”模式不匹配。
我会考虑使用find
:
find . -name "*.tar" -maxdepth 0 -cmin +120 -delete
应该杀死当前目录中超过两小时的所有 *.tar 文件(使用 +119 获得一分钟的宽限时间)。另外,-delete
在测试此方法是否有效时,您可以省略。
答案2
我认为问题出$DATE
在最后一行变量的扩展上。要测试这一点,您可以简单地echo
在命令前面添加rm
并运行脚本,或者您可以尝试通过使用${DATE}
而不是仅$DATE
在rm
命令中来防止出现问题。
问题也可能是您试图删除不存在的文件名,因为您似乎指定了两种不同的日期输出格式,并且我假设日期格式应该在 tar 的创建之间匹配文件并在两小时后删除。