移动文件时是否收到此消息?mv:不会覆盖刚创建的

Nac*_*dra 10 shell redhat move overwrite

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

mv: will not overwrite just-created <filename> with <sameFilename>
Run Code Online (Sandbox Code Playgroud)

其中filename是具有完整路径的原始文件名,而sameFilename是完全相同的文件和路径.我经常每天使用这个脚本,之前从未收到此消息.

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

rod*_*ion 11

以下是如何重现它:

> 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'
Run Code Online (Sandbox Code Playgroud)

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

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


kri*_*iss 8

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

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

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