moneyslow.com

rsync --delete --delete-before --delete-during 多个选项有啥区别?

ubuntu小技巧

ubuntu小技巧

先看原文解释:

--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

--del/--delete_during:复制时从目标目录中删除文件(与--delete-before相比,节省了内存:--delete-before进行了单独扫描以查找可删除的内容)
--delete:如果目标目录中没有文件,则删除它们在源目录中存在。
--delete-before:从源目录复制具有相同名称的文件之前,先删除目标目录中的文件
--delete-during:在复制具有相同名称的文件时删除目标目录中的文件源目录中的名称
--delete-delay:标记在传输过程中删除,但要等到传输完成后
--delete-after:接收器在传输之后而不是之前删除…如果rsync的其他部分将多余的文件移到了其他地方,想要它而不是--delete-delay,因为--delete-delay决定了在传输过程中要删除的内容,而--delete-after则检查了目录以查找应在完成所有操作后删除的文件。
--delete-excluded:从目标位置删除文件从源目录的传输中明确排除的目录。

具体讨论来看:

默认情况下,rsync不会在目标端删除任何文件。要使rsync完全删除文件,您需要至少使用一个删除选项。
如果您不在乎何时删除文件,只需使用--delete并将选择保留为rsync即可。您可以将--delete与其他删除选项结合使用(这不会冲突),但是您不必这样做,因为所有其他删除选项都已经暗示了--delete。
--delete-before的工作方式如下:rsync看起来源于哪些文件,并且目的地中存在哪些文件,删除在目的地但在源中找不到的所有文件,然后开始实际同步。如果目标的存储空间很小,则此顺序很有用,因为在开始传输任何新文件之前,它将首先释放目标上的更多磁盘空间。缺点是rsync将需要更多的内存来执行该操作,并且整个操作是一个两步过程,因此速度较慢。
--delete-during的工作方式如下:rsync立即开始同步文件,并且当它遇到一个存在的文件时仅在目的地,它被删除。这样就不会造成速度损失,也不需要额外的内存。不利的一面是,可能会在删除删除的文件之前先将许多新文件复制到目标位置,因此目标位置在操作过程中可能需要比最终在整个操作完成后需要更多的磁盘存储空间。完成。
--delete-after的工作方式如下:首先同步所有文件,然后执行--delete-before在同步阶段之前执行的相同操作。在大多数情况下,这是最糟糕的选择,因为它需要最多的内存,目标位置上的大多数磁盘空间,并且速度较慢,因为它需要两个步骤。基本上,它结合了其他两种方法的所有缺点。此选项主要用于您正在使用“合并文件”的情况(什么是合并文件以及它们如何工作超出了此答案的范围)。由于这些文件可能包含删除期间要排除的文件的规则,因此,如果在删除阶段要考虑其内容,则必须在删除阶段之前复制新的合并文件。除非有此要求,否则--delete-after没有任何优势。
--delete-delay是一个相当新的选项(在rsync 2.6.9中不可用,例如在macOS 10.15中仍是默认设置)。它像--delete-during一样工作,除了它不会立即删除文件,而是在同步完成后删除文件,因此它是--delete-during和--delete-after的混合体。优点是它比--delete-after更快,并且仍正确支持合并文件,缺点是在同步过程中需要更多的内存。
--delete-excluded告诉rsync不仅删除源上丢失的文件,还要删除目的地中被排除在同步之外的文件(--exclude或--exclude-from),无论这些文件是否实际存在于源文件中。

Exit mobile version