我在 FileZilla 中错误地将一个文件夹拖放到另一个文件夹中。
~/big_folder
~/some_other_folder
被移动的文件夹是一个非常大的文件夹。它包括数十万个文件(node_modules、小图像文件、很多文件夹)
奇怪的是,当我松开鼠标后,移动就完成了。文件夹“big_folder”移动到“some_other_folder”。
~/some_other_folder/big_folder
(搬家后big_folder
没有)~/
然后我意识到错误并尝试向后移动,但它在 FileZilla 和终端上都失败了。
然后我必须cp -r
将文件复制回来,因为有服务器端代码访问这些文件~/big_folder
它需要永远等待......
我应该怎么办?
顺便说一句,这是 FileZilla 的输出(这是回退的失败):
Status: Renaming '/root/big_folder' to '/root/some_other_folder/big_folder'
Status: /root/big_folder -> /root/some_other_folder/big_folder
Status: Renaming '/root/some_other_folder/big_folder' to '/root/big_folder'
Command: mv "big_folder" "/root/big_folder"
Error: mv /root/some_other_folder/big_folder /root/big_folder: received failure with description 'Failure'
如果一个目录在同一个文件系统(同一个分区)中移动,那么只需要重命名该目录的文件路径。除了目录本身的目录条目之外,无需更改任何数据。
复制目录时,需要复制每个文件的数据。这涉及读取所有源数据并将其写入目标。
在文件系统之间移动目录将涉及将数据复制到目标并将其从源中删除。这将花费大约与在单个文件系统中复制(复制)数据一样长的时间。
如果 FileZilla 成功将目录从 重命名
~/big_folder
为~/some_other_folder/big_folder
,那么我将使用...在首先确保没有调用目录之后
~/big_folder
(如果有,移动将作为子文件夹放入目录big_folder
中)。some_other_folder
~/big_folder
现有的答案很好,但我想通过准确显示移动和复制文件时发生的情况来扩展它。当您在复制期间查看系统调用时,您会看到:
这将打开源文件,然后创建第二个文件。然后它将源文件的内容读取到内存并将该内存写入目标文件。这需要几个上下文切换和一些磁盘 I/O,这对于大文件来说可能相当高。但是,如果您移动文件,您会看到:
重要的是要记住,如果文件位于同一物理磁盘上的同一文件系统上,您只会看到该文件被重命名。如果您创建一个巨大的数 GB 文件,然后在您家中的两个位置之间移动它,您会注意到该操作立即完成。另一方面,如果您将其移动到外部设备,则移动所需的时间与您使用的时间一样长
cp
。系统调用跟踪将与第一个相同,但unlink("hello1.txt")
在最后。这是因为如果源和目标位于同一文件系统上,重命名只能用于移动文件。