BASH - 使用 rm 命令的简单脚本不起作用

BASH - 使用 rm 命令的简单脚本不起作用

我制作了这个简单的脚本:

#/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}而不是仅$DATErm命令中来防止出现问题。

问题也可能是您试图删除不存在的文件名,因为您似乎指定了两种不同的日期输出格式,并且我假设日期格式应该在 tar 的创建之间匹配文件并在两小时后删除。

相关内容