使用rsync在目录之间移动(而不是复制)文件?


54

我一直在使用rsync复制文件一段时间。我的理解是,当要传输的某些文件已经在目标目录中时,仅传输增量差异(即“增量”),rsynccp更快。

如果这是正确的,那么使用rsync移动文件夹A的内容(例如,文件夹BB为空)是否有任何好处?

文件夹A的数据接近1TB(其中包含数百万个文件)。传输将通过本地网络完成AB不同的文件系统上,都安装在超级计算机上,例如ANFSB是有光泽的)。

除此之外,我应该使用什么标志来要求rsync将文件从A移动(而不是复制)到B(即,在传输成功完成后删除A)?


7
我认为rsync不能替代mvmv当源文件和目标文件位于同一文件系统中时,我希望在大多数文件系统类型上速度会更快,因为rsync无论如何都必须进行复制,并且mv可能无需更改几个目录条目。我能找到的最接近的东西rsync mv--remove-source-files命令,但这不会删除目录。
jw013

1
谢谢@ jw013!为了澄清起见,文件位于不同的文件系统上,并且传输将在网络上进行。您知道那还会mv更快吗?
Amelio Vazquez-Reina

1
好吧,mv不能在网络上运行-它必须依靠本地安装(例如NFS)。如果瓶颈是网络,rsync很可能比快mv,因为rsync可以做的压缩。
2012年

2
顺便说cp-u选择复制源文件,如果它是比目标文件或目标文件丢失时更新

Answers:


69

您可以传递--remove-source-files给rsync来移动文件,而不是复制它们。

但是在您的情况下,使用rsync没有意义,因为目标为空。平原mv将尽快完成任务。

在您的情况下,可能会影响性能的是网络协议的选择,如果您可以在NFS,Samba,sshfs,sftp,ssh上的rsync,通过ssh传输的tar等之间进行选择。这些方法的相对速度取决于有关文件大小,网络和磁盘带宽以及其他因素的信息,因此无法提供一般性建议,您需要运行自己的基准测试。


6
只是重申一下Caleb所说的话,如果您担心由于例如不稳定的网络而导致的损坏,则rsync很有用,因为它通过在写入块时对块进行校验和来验证其写入的每个文件。
Daniel S. Sterling

5
--remove-source-files仅删除源文件。如果您想清除我们的源代码,在rsync成功运行之后,是否不必对源代码执行rm -rf(或find所有目录并通过-delete)?
Trevor Boyd Smith,

1
@ DanielS.Sterling rsync在写入块后不对其进行校验和(它使用校验和来查找现有文件的哪些部分已更新且需要同步)。您可以进行第二次同步,--checksum以告知其验证第一次同步的结果。
克莱门特

19

由于--remove-source-files不删除目录,因此我发出以下命令以通过ssh 移动文件:

rsync -avh --progress --remove-source-files /home/user/mystuff/* user@external.server:/home/user/backup
find . -type d -empty -delete

我个人比较喜欢的--progress功能,因为我做手工转让。如果使用脚本,请将其删除。我希望它会稍微降低传输速度。该find命令的delete选项仅删除空目录-请勿使用rm -rf,因为在未传输文件的情况下,它可能会删除非空目录。该-delete选项打开该-depth选项,以便从“底部”向上删除空目录树。


3
-delete-exec rmdir {} +等等好得多
lkraav

1
我会跳过星号,因为如果在本地执行此操作,则仅带有斜杠/并带有路径。如果您使用星号,则rsync将跳过隐藏的文件,例如.htaccess或.htpasswd(如果有)
Svetoslav Marinov

16

总的来说,正如Gilles所说,使用rsync移动文件没有优势,因为mv这样可以更轻松地完成相同的工作,并且在普通文件系统之间没有潜在的速度提升。

但是,有时候会有优势。特别是,如果您对源,目标或执行工作的机器的稳定性有任何疑问,使用可以rsync使您恢复工作。如果您的传输量很大,例如电网不可靠,那么这可能是一个显着的优势。使用rsync将是一种更稳定的方法,可避免发生故障时损坏数据并从上次中断的地方继续工作。


4
我会说这是一个巨大的优势。实际上,我要说的mv是,只有目标和源位于同一分区中才更好,因此,mv仅编辑文件的元数据而不是进行复制。
nomen

2
rsync我想保留文件夹结构(如果使用的话--relative)是我需要的而不是mv 。
Sridhar Sarnobat,

14

使用rsync移动文件夹A(例如,文件夹B,其中B为空)的内容有什么好处吗?

我发现自己处于rsync比mv快的情况下,这仅仅是因为mv无法处理目录中的文件数。我从运行20天的安全摄像机中获得了180万张照片,由于无法分配资源,因此mv命令失败退出。

但是rsync似乎可以毫无问题地处理所有文件。


1

如果你想递归合并目录...移动一个目录到另一个目录中具有潜在的重复的目录名,那么请参阅我的答案在这里上serverfault.com。mv当目录以相同的名称存在时,并且rsync复制(读取和写入完整数据)每个文件而不是仅移动文件(仅读取和写入元数据)时,做得不好。


0

没有办法像Linux mv命令那样使用rsync实际移动文件。通过使用--remove-source-files,实际上是将文件复制到目标,然后从源中删除文件(目录除外)。这可能达到您移动文件的目的,但不会节省时间或进行I / O操作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.