17

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

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

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

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

4

2 回答 2

17

以下是如何重现它:

> 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保持原样),因此下次执行它时,问题很可能会消失。

于 2011-01-12T14:06:01.270 回答
8

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

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

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

于 2014-01-22T22:51:51.860 回答