【问题标题】:Have you ever got this message when moving a file? mv: will not overwrite just-created您在移动文件时是否收到此消息? mv: 不会覆盖刚刚创建的
【发布时间】:2011-06-07 20:27:30
【问题描述】:

我有一个执行多项任务的 bourne shell 脚本。其中一项任务是将一些文件移动到某个目录。今天,当我运行脚本时,我收到以下消息:

mv: will not overwrite just-created <filename> with <sameFilename>

其中 filename 是原始文件名及其完整路径,sameFilename 是完全相同的文件和路径。我每天都经常使用这个脚本,以前从未收到过这个消息。

运行脚本后,我立即重新运行它以查看错误是否仍然存在,并且我无法再次重现它。 我在 Red Hat 5 Enterprise 中运行此脚本。

【问题讨论】:

    标签: shell move redhat overwrite


    【解决方案1】:

    复制方法如下:

    > mkdir a b c
    > touch a/file
    > touch b/file
    > mv a/file b/file c/
    mv: will not overwrite just-created `c/file' with `b/file'
    

    可能有其他方法可以重现这种情况,但可以合理地假设上述情况已经发生。

    也就是说,您的脚本在一个 mv 命令中将多个同名文件移动到同一个目标中。执行上述操作后,您会注意到a/file 已成功移动(并且b/file 保持原样),因此下次执行时,问题很可能会消失。

    【讨论】:

      【解决方案2】:

      这是因为两个同名的不同文件将被移动到同一个地方,只需要一个命令。 -f 选项对这种情况没有帮助,它仅适用于已经有一个目标文件在运行 mv 命令时将被覆盖的情况。发生的情况是 mv 移动了一个文件(遇到的第一个文件),并且它拒绝移动第二个文件(这将覆盖另一个文件,有丢失用户数据的风险)。此行为还说明,如果您只有两个具有相同名称的文件,则警告将在您第二次运行该命令时消失。

      但是,如果您的目录树中有许多同名文件,则警告可能会一直存在很多次运行。

      如果您知道自己在做什么,避免此警告的方法是将选项 --backup=numbered 添加到 mv。目标文件不会被覆盖,但会在发生冲突时创建备份文件。如果想法是删除这些,则可以在之后使用 rm *~ 轻松完成。

      【讨论】:

        猜你喜欢
        • 2022-01-17
        • 1970-01-01
        • 1970-01-01
        • 2020-07-29
        • 2018-03-09
        • 2013-09-04
        • 2017-03-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多