如何删除源中缺少的目标文件夹和文件(复制之前)?

如何删除源中缺少的目标文件夹和文件(复制之前)?

我有时会遇到这样的问题rsync:当剩余空间不足时,尝试将新文件从源传输到目标(两者具有相同的空间),这会导致出现此错误消息:

rsync: write failed on "{FILE}": No space left on device (28)

但是,如果不存在的文件,则还有剩余空间来源目录中不再有目的地在任何文件传输之前。我正在使用--delete(默认--delete-before),但它只会在传输更新版本之前删除文件。

所以,我想知道,我怎样才能首先删除所有过时的文件(使用 bash 或 rsync)?

答案1

rsync 的 --delete 标志将导致目标目录中未出现在源目录中的文件被删除。默认行为是在传输文件之前删除。(--delete-before)

当处于增量递归模式(自 rsync 3.0 版以来的默认模式)时,rsync 会增量地处理目录,并且“删除之前”仅以每个目录为基础进行。它会删除文件,然后在遇到的每个子目录中复制新文件。

如果您希望它在进行任何复制之前通过目录树删除所有要删除的文件,那么您还需要使用以下标志关闭增量递归模式:

--no-i-r

请注意,这将导致它恢复到以前的行为,即从传输两端的整个目录树中收集文件列表,执行所有适用的删除,然后执行所有复制。如果您的目录结构非常大,这可能需要更长时间,但行为是正确的。

相关内容