答案1
您可以传递--remove-source-files
给 rsync 来移动文件而不是复制它们。
但就您而言,使用 rsync 是没有意义的,因为目的地是空的。平原mv
将尽快完成这项工作。
在您的情况下,如果您可以在 NFS、Samba、sshfs、sftp、rsync over ssh、tar 管道传输到 ssh 等之间进行选择,那么网络协议的选择可能会对性能产生影响。这些方法的相对速度取决于取决于文件大小、网络和磁盘带宽以及其他因素,因此无法提供一般建议,您需要运行自己的基准测试。
答案2
由于--remove-source-files
不会删除目录,因此我发出以下命令移动通过 ssh 的文件:
rsync -avzh --remove-source-files --progress /source/ user@server:/target \
&& find /source -type d -empty -delete
我个人喜欢这个--progress
功能,因为我手动进行此传输。如果您使用脚本,请将其删除。我预计它会稍微减慢传输速度。该find
命令的删除选项仅删除空目录 - 不要使用rm -rf
,因为如果文件未传输,它可能会删除非空目录。该-delete
选项打开该-depth
选项,以便从“底部”向上删除空目录树。
答案3
一般来说如吉尔斯说当可以更简单地完成相同的工作并且普通文件系统之间没有潜在的速度增益时,使用rsync
移动文件没有任何优势。mv
但有时还是有优势的。特别是,如果您对源、目标或执行工作的机器的稳定性有任何疑问,则使用rsync
可以让您恢复能力。如果您的传输规模非常大,并且您的电网不可靠,这可能是一个显着的优势。使用 rsync 将是一种更稳定的方法,可以在发生故障时避免数据损坏并从中断处继续。
答案4
如果你想递归合并目录...将一个目录移动到另一个目录中,可能会复制目录名称,然后请看我的回答这里在 serverfault.com 上。mv
当目录存在同名时,效果很差,并且rsync
复制(读取+写入完整数据)每个文件而不是仅仅移动它们(仅读取和写入元数据)。