当我在 Windows 7 文件资源管理器中开始复制一个非常大的文件夹(比如 40 GB)时,进度显示可能需要几个小时才能完成。所以我把它放了一夜,结果第二天早上才发现它仍然声称正在尝试复制(它失败了,但似乎仍在进行中)。
有没有一种方法可以高度自信地复制一个大文件夹,确保它能够成功完成,或者至少在出现问题时复制完成并显示错误消息?
答案1
使用 Windows 文件资源管理器复制大文件夹确实没有什么帮助,原因有二。
- 主要原因是文件复制可能因某种原因而失败,但它永远不会返回,并且看起来好像复制仍在进行中,但实际上它只是卡住了。这会浪费用户大量时间。
- 如果它由于错误而失败,它不会说明失败的原因以及问题是什么。
例如,文件复制可能会失败,因为在 40 GB 数据中,有一个无效的快捷方式缺少目标。这将导致复制失败,但用户不会知道,并且看起来好像复制仍在进行中。可能还有其他我们不知道的失败原因。
解决方案:
- 最好在命令行上复制大型文件夹并使用“xcopy”。这样做的好处是,如果失败,它会立即返回,您就会知道。也就是说,它仍然会在上述情况下失败(无效的快捷方式),但会正确出错。
- 最好的选择是部署盲复制,它不关心文件,而是逐位复制。最好的工具是
scp
或rsync
,但它们在 Windows 上不容易获得。
在 Windows 上使用 SCP
安装赛格威scp
在 Windows 上,按照以下方式从其 shell使用命令,假设将 c:\BigFolder 复制到 USB 驱动器 F:\BigFolderBackup/
scp -r /cygdrive/c/BigFolder/ /cygdrive/f/BigFolderBackup/
其中 -r 表示递归复制,即复制所有子文件夹及其文件。
更新 1
正如 Scott 在评论中指出的那样,由于它是在本地机器上复制的,因此cp
也会这样做。语法基本相同。
我遇到的另一种情况是文件夹包含我没有权限读取的文件。我们的 IT 部门不允许用户运行 CCleaner 实用程序,因此对其禁用了读取权限。
我使用了cp
这次,它表现很好。它报告了此文件上的相应错误(未复制它),但没有停止复制操作,而是继续复制其他所有内容。这也是这种方法胜出的另一个原因。
更新 2
我发现scp
(也可能是cp
)修改文件所有权会导致读/写访问出现问题。添加p
标志应该可以解决这个问题,正如本文所述文章. 另一种方法是使用rsync
和-o
标志-g
,如中所述这回答以保留文件的所有权。