如何通过 cron 作业移动文件并为其名称附加时间戳?

How can I move a file and append a timestamp to its name via cron job?

我有一个文件 CBD_DATA.zip 存在于目录中:/home/cbd_dev/CBD_DATA.zip。我想将它移动到目录 /home/sundaram_srivastava/archives/CBD_DATA_{DateTimeStamp}.zip.

我试过使用 cron 作业:

* * * * * mv /home/cbd_dev/CBD_DATA.zip /home/sundaram_srivastava/archives > /home/sundaram_srivastava/archives/CBD_DATA_`date +\%d\%m\%y`.zip

上面的 cron 作业的问题是它将文件 CBD_DATA.zip 移动到另一个同名目录,然后创建另一个文件 CBD_DATA_110620.

现在,文件 CBD_DATA_110620 为 0 KB。所以,在目标目录中,我有两个文件,CBD_DATA.zipCBD_DATA_110620,但我只想要一个,它不应该是空的。

我应该在我的 cron 代码中更改什么?

首先,我会尝试在没有 cron 作业的情况下自行找出命令。你正在做的是这样的(为了便于阅读,缩短了目录路径):

mv /foo/CBD_DATA.zip /foo/archives > /foo/archives/CBD_DATA_`date +%d%m%y`.zip

这会移动文件,然后创建一个新的空文件; mv 命令没有输出,重定向也没有要重定向的内容,因此带有日期戳的文件为空。

mv 命令的第二个参数是新位置本身;如果它是一个目录,文件名保持不变,但如果它不是一个目录,它被解释为新名称。您不需要任何重定向。

mv /foo/CBD_DATA.zip "/foo/archives/CBD_DATA_$(date '+%d%m%y').zip"

我已将命令替换中已弃用的反引号替换为 $(...) 并引用了扩展。旁注:如果您可以选择日期戳格式,我强烈建议您改用 +%F(或 %Y%m%d),以便按时间顺序排序。

使用你的路径并逃脱了一个 cron 作业(你真的想要每分钟 运行 这个吗?):

* * * * * mv /home/cbd_dev/CBD_DATA.zip "/home/sundaram_srivastava/archives/CBD_DATA_$(date +\%d\%m\%y).zip"