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

Ame*_*ina 76 cp rsync

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

如果这是正确的,使用rsync移动文件夹A的内容是否有任何优势,比如文件夹B,而B为空?

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

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

Gil*_*il' 88

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

但是在您的情况下,使用 rsync 毫无意义,因为目标是空的。平原mv将尽快完成这项工作。

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

  • 重申一下 Caleb 所说的话,如果您担心由于例如不稳定的网络而导致损坏,rsync 可能是有意义的,因为它通过在写入块时对块进行校验和来验证它写入的每个文件。 (9认同)
  • `--remove-source-files` 只删除源中的文件。如果您想清除我们的源代码,在 rsync 成功运行后,您是否必须在源代码上执行 rm -rf(或“查找”所有目录并传递“-delete”)? (6认同)
  • @DanielS.Sterling rsync 在写入块后不会校验和块(它使用校验和来查找现有文件的哪些部分已更新并需要同步)。您可以使用 `--checksum` 进行第二次同步以告诉它验证第一次同步的结果。 (3认同)

Kri*_*ian 38

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

rsync -avzh --remove-source-files --progress /source/ user@server:/target \
&&  find /source -type d -empty -delete
Run Code Online (Sandbox Code Playgroud)

我个人喜欢这个--progress功能,因为我是手动传输的。如果您使用脚本,请将其删除。我预计它会略微减慢传输速度。该find命令的删除选项仅删除空目录 - 不要使用rm -rf,因为它可能会删除非空目录,以防文件未传输。该-delete选项打开该-depth选项,以便从“底部”向上删除空目录树。

  • `-delete` 比 `-exec rmdir {} +` 等要好得多 (4认同)
  • 我会跳过星号,因为如果在本地执行此操作,则只有尾部斜杠/带路径。如果您使用星号 rsync 将跳过隐藏文件,例如 .htaccess 或 .htpasswd(如果有) (2认同)
  • 仅当 rsync 成功存在时才应执行“find”命令。否则,您将删除源中您可能真正想要保留的空目录。使用 & 运算符,因此:`rsync ... && find ...` (2认同)
  • **注意:**如果您的“/source”实际上是符号链接,则“find”在“rsync”完成后不会删除任何空文件夹。您必须“cd”进入“/source”,然后运行“find”。-类型 d -空 -删除` (2认同)
  • @dsz 当您使用“-delete”时,“-深度”操作会自动启用 (2认同)

Cal*_*leb 21

总的来说,正如Gilles 所说rsyncmv可以更轻松地完成相同的工作并且普通文件系统之间没有潜在的速度增益时,使用移动文件没有任何优势。

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

  • 我会说这是一个巨大的优势。事实上,我会说 `mv` 只有在目标和源位于同一分区时才会更好,因此 `mv` 只编辑文件的元数据而不是进行复制。 (7认同)
  • 有一次我需要 `rsync` 而不是 mv 是我想保留文件夹结构(如果你使用 `--relative`)。 (2认同)
  • 如果您要求的话,rsync 可以保留移动内容中的硬链接,而 mv 则不能。 (2认同)

小智 18

使用 rsync 移动文件夹 A 的内容(例如文件夹 B,其中 B 为空)是否有任何优势?

我发现自己处于 rsync 比 mv 快的情况,这仅仅是因为 mv 无法处理目录中的文件数量。我有来自安全摄像头的 180 万张照片,该摄像头运行了 20 天,并且 mv 命令因无法分配资源而失败退出。

然而,rsync 似乎可以毫无问题地处理所有文件。


Pet*_*ter 7

如果您想递归地合并目录...将一个目录移动到另一个可能具有重复目录名的目录中,那么请在 serverfault.com 上查看我的答案mv当目录存在同名时,效果很差,并且rsync复制(读取+写入完整数据)每个文件而不是仅仅移动它们(仅读取和写入元数据)。