rsync 的 --remove-source-files 选项的使用

Tim*_*Tim 7 rsync

从联机帮助页 rsync

--remove-source-files

这告诉 rsync 从发送方删除作为传输一部分并已在接收方成功复制的文件(即非目录)。

  • 这是否意味着发送方的文件是传输的一部分或在接收方复制?

  • 我也可以删除发送方的目录吗?

请注意,您应该只对静止的源文件使用此选项。

  • “静止的源文件”是什么意思?

如果您使用它来将出现在特定目录中的文件移动到另一台主机,请确保将完成的文件重命名到源目录中,而不是直接写入其中,以便 rsync 无法传输文件还没有完全写完。

  • 这是什么意思?

如果您不能先​​将文件写入不同的目录,则应使用命名习惯用法,让 rsync 避免传输尚未完成的文件(例如,在写入文件时将文件命名为“foo.new”,将其重命名为“ foo" 完成后,然后使用选项 --exclude='*.new' 进行 rsync 传输)。

  • 这是什么意思?

从 3.1.0 开始,如果文件的大小或修改时间没有保持不变,rsync 将跳过发送方删除(并输出错误)。

  • 这是什么意思?

谢谢。

Afr*_*Joe 9

问:这是否意味着发送方的文件是传输的一部分或在接收方复制?

  • 答:两者都有

问:我也可以删除发送端的目录吗?

  • 答:是的,
    --remove-source-files 然后发出命令
    find <source_directory> -type d -empty -deleteOR
    find <source_directory> -type l -type d -empty -delete(在删除中包含符号链接)

(曾是: --remove-source-files 然后发出命令 rm -rf <source_directory>)


警告:

正如 OrangeDog 的评论中所述,该rm -rf建议是不安全的。具体而言,任何因任何原因未传输的文件(文件在构建传输列表和开始实际传输该文件之间发生更改、接收方磁盘空间不足、网络连接断开等)将在源目录中保持不变通过 rsync - 但是在您rm -rf调用之后它们就消失了。如果所有源文件都已成功传输和删除,find上面的命令将递归删除空的源树,但不会留下任何剩余的文件(当然还有它们的包含目录)。


问:“静止的源文件”是什么意思?

  • A: 表示已写入并关闭的文件

问:如果您使用它来将显示在特定目录中的文件移动到另一台主机,请确保将完成的文件重命名到源目录中,而不是直接写入其中,以便 rsync 无法传输尚未完全写入的文件。这是什么意思?

  • A: 就是我上面说的意思

问:如果你不能先将文件写入不同的目录,你应该使用一个命名习惯,让 rsync 避免传输尚未完成的文件(例如,在写入文件时将文件命名为“foo.new”,重命名它完成后改为“foo”,然后使用选项 --exclude='*.new' 进行 rsync 传输)。这是什么意思?

  • A:这意味着RSYNC 制作了一个首先要传输的文件列表。然后它将它们写入不同的目录(目标目录),因此如果您传输尚未完成的文件,最好在完成后使用 --exclude 选项重命名它

问:从 3.1.0 开始,如果文件的大小或修改时间没有保持不变,rsync 将跳过发送方删除(并输出错误)。这是什么意思?

  • 答:如果 RSYNC 检测到在将文件写入目标目录时,从扫描文件到实际写入目标目录之间文件大小发生了变化,则 RSYNC 将跳过该文件。

  • `rm -rf &lt;source_directory&gt;` 是**不安全**。这将删除所有内容,包括未成功同步的文件。你需要类似`find &lt;source_directory&gt; -type -d -empty -delete` 之类的东西。 (6认同)