rsync删除选项有什么区别?


115

我在rsync手册页上看到有很多delete选项,但是并不真正理解它们之间的区别。这些选项有什么区别?

 --del                   an alias for --delete-during
 --delete                delete extraneous files from dest dirs
 --delete-before         receiver deletes before transfer (default)
 --delete-during         receiver deletes during xfer, not before
 --delete-delay          find deletions during, delete after
 --delete-after          receiver deletes after transfer, not before
 --delete-excluded       also delete excluded files from dest dirs

2
为什么--delete-before被描述为(default)?我无法理解是什么(default)意思。
马尔科马萨拉2016年

1
它不再在man页面中指定为默认值rsync version 3.1.2 protocol version 31。但是,我对带引号文本的版本的猜测是,如果你只使用--delete而不是--delete-WHEN,那就好像你指定--delete-WHENWHEN默认值before
汤姆黑尔2017年

Answers:


112
  • --del/--delete_during:在复制目标目录时从目标目录中删除文件(与以下内容相比节省内存--delete-before--delete-before进行单独扫描以查找可删除的内容)

  • --delete:如果源目录中不存在目标目录中的文件,则删除这些文件。

  • --delete-before:在从源目录复制带有相同名称的文件之前,删除目标目录中的文件

  • --delete-during:删除目标目录中的文件WHILE从源目录复制file-with-same-name

  • --delete-delay:标记在传输过程中删除,但请等到传输完成

  • --delete-after:Receiver在传输之后删除,而不是之前...如果rsync的其他部分将其他文件移动到其他位置,则需要这样做而不是--delete-delay,因为--delete-delay在传输过程中决定要删除的内容,而--delete-after检查目录中的文件一切都完成后应该删除。

  • --delete-excluded:从目标目录中删除明确排除从源目录传输的文件。

rsync的重点不是复制,而是归档。这是一个重要的区别。处理已删除/已更改的文件至关重要,并且在许多情况下都是微妙的。

这个--delete旗子特别是我见过很多次搞砸了。很多人使用rsync将文件移动到低优先级存储,在这种情况下,您希望移动到的文件仍然存在于目标目录中。这不是删除的作用:--delete确保当您从源目录中删除文件时,它也会从目标目录中删除,因此您的目标不会充满垃圾......一旦看到一个人消灭了他的备份通过放入一个新的驱动器,而不是关闭他的夜间rsync脚本。脚本看到源目录现在为空,它删除了目标目录中的每个文件,因此它们匹配。

大多数其他选项都与空间或性能相关。删除文件很重要,如果你想在做任何事情之前确保传输成功,但是如果你的设备太小而无法处理所有信息的2份副本,你需要随时删除等等。这是一个由于其在多个平台上的悠久历史,有点古怪:添加了一些选项,以便习惯于某些行为的人不会感到困惑。


3
那么--delete和--delete - 之前是一样的吗?man rsync没有说--delete何时删除文件。
2015年

@ppr:取决于系统。它有这么多特定选项的原因是因为Solaris上的删除!= HP-UX上的删除!= AIX上的删除!= Linux上的删除。
Satanicpuppy 2015年

在对整个目录进行rsyncing时,是否delete-after在同步之间删除每个文件,或者仅在整个目录被镜像之后删除?我认为delete-after这足以满足我的需求,但是当备份我的一个驱动器时,我在设备上没有剩余空间。
Sridhar Sarnobat 2015年

1
@Sridhar-Sarnobat:要么。它会移动它要移动的所有东西,当它完成后,它就会开始删除东西。如果你想在它移动一切之前删除它,请使用--delete-during
Satanicpuppy 2015年

2
经过一些经验,我发现即使delete-during并不总是阻止no space left on device(在Linux上)。因此delete-before,唯一有保证的方法是避免它(例如镜像几乎已满的驱动器,目标驱动器也几乎已满)。
Sridhar Sarnobat 2017年

1

有两件事情发生了:

  1. 谁删除
  2. 当它发生时

可以指示发送者或接收者进行删除(我不确定为什么这很重要)。因此,当来自一台计算机的rsync连接到另一侧的rsync服务器时,这将确定谁正在有效地发出删除命令。

当它发生时非常简单......之前意味着删除所有文件,然后rsync复制文件。在通过文件列表的过程中,它会在它们出现时删除它们,并且在它意味着等待所有文件都被转移然后删除远程端之后。这仅在传输中断时才有意义。


我很确定这些选项都与从发件人方面删除内容无关。所有这些(AFAIK)都涉及从接收方那边删除东西。另外,你说:“之前意味着删除所有文件,然后rsync复制文件” - 这是对的吗?我希望--delete-before只删除那些需要消失的文件,而不是所有文件!但我想rsync 可能会删除所有内容然后通过“新”(可能未更改的)数据进行传输...
Quuxplusone 2016年

1
啊,“从发送者侧删除” 由rsync的支持,但该选项的名称--remove-source-files
Quuxplusone 2016年

1

值得一提的另一点是,如果源目录以...结尾/*,则rsync将仅考虑这些文件而不考虑目录本身(因此缺少要在目标上删除的文件)。

如果你在上面指定了一个删除选项,但是rsync看起来没有删除,那么请检查以确保你不是意外地使用文件列表并提供文件列表。

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.