我运行了 mv 命令来移动两个文件,我们将它们命名为 file_name_1、file_name_2。我使用的命令是:
mv file_name* /u/projects/lib
我以为这会将两个文件都移动到 lib 目录中。但最终发生的是 file_name_2 被正确移动,但 file_name_1 却从我要移动的目录和我要移动的目录中被删除。
丢失文件不是什么大问题,因为我能够从备份中恢复文件并且没有丢失任何工作,但我很好奇为什么会发生这种情况,以及防止它再次发生的最佳方法是什么?(现在我只是复制文件,然后在确定复制正确后删除源文件)
答案1
mv 命令删除源目录和目标目录中的文件
-不可能-。这不是 mv 的工作方式。- 如果“mv”确实移动了文件(如跨文件系统),则它会执行“cp -a”,并且只有当它确认“cp -a”成功时,它才会执行删除。请参阅$ info mv
有关此内容的详细说明。
在同一文件系统内移动文件使用重命名调用,这只是元数据更改。文件本身没有被触及。
mv 文件名* /u/projects/lib
“file_name*” 可能是一个文件,而“lib” 不存在。因此,您通过省略“/u/projects/lib”末尾的“/”将“file_name*”重命名为“lib”。如果您添加了“/”,则命令将显示目录“lib”不存在的错误。不跨越文件系统边界的文件重命名只是元数据更改。
如果“file_name*”是 2 个或更多文件,您将收到有关将文件移动到同一文件的错误。如果“lib”作为目录存在,您将在“lib/”中找到文件