【问题标题】:How can I move a file and append a timestamp to its name via cron job?如何通过 cron 作业移动文件并为其名称附加时间戳?
【发布时间】:2020-10-01 01:59:23
【问题描述】:

我的目录中有一个文件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 cron-task crontrigger


    【解决方案1】:

    首先,我会尝试自己找出命令,而不需要 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"
    

    【讨论】:

    • 我每分钟都在运行它以进行单元测试。实际工作中不会这样。
    • 谢谢你的回答,它解释得很好......真的很感激......!!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-31
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-25
    相关资源
    最近更新 更多