【发布时间】:2017-08-10 09:58:29
【问题描述】:
我不小心为我的源文件夹执行了没有 ./ 的 mv。 它从根文件夹复制文件,但没有删除它们。
我检查了一些从根目录复制到新文件夹中的文件,它们似乎仍在根目录和新文件夹中。 所以我认为命令没有移动,而是复制了文件。 我只是想了解这里到底发生了什么。 有什么想法吗?
这是我执行的命令: bla:my/current/folder$ mv -v /* sub_folder/
【问题讨论】:
我不小心为我的源文件夹执行了没有 ./ 的 mv。 它从根文件夹复制文件,但没有删除它们。
我检查了一些从根目录复制到新文件夹中的文件,它们似乎仍在根目录和新文件夹中。 所以我认为命令没有移动,而是复制了文件。 我只是想了解这里到底发生了什么。 有什么想法吗?
这是我执行的命令: bla:my/current/folder$ mv -v /* sub_folder/
【问题讨论】:
您正在从根目录复制,如您所见,您使用的是 from /*,这意味着从根文件系统到该子文件夹。对于非特权用户,您无法执行此操作,因为默认情况下您无法在主文件夹之外写入文件。
只需删除* 之前的/,然后重试。或者在/前加一个点,例如:mv -v ./* sub_folder/
【讨论】:
我测试了这个命令,这些是我的发现。
mv 有两个阶段“复制”和“删除”。
当用户具有读取权限但无法删除且没有写入权限时,mv 复制。
如果 mv 进程在其“复制”阶段终止,则不会删除任何已复制的文件。
mv 在目录上复制目录中的所有文件,然后递归删除目录。但如果目标是文件列表(可能是 shell 扩展),则“删除”阶段在每个“复制”之后运行,而不是在所有列出的文件都被复制之后。
【讨论】: