我备份大文件夹,首先我运行rsync ... --dry-run
以验证文件列表。
然后我曾经执行相同的命令,但这次没有--dry-run
传输文件。
因为它要扫描文件两次,所以我想到了一个改进:我将 的输出重定向rsync ... --dry-run
到一个文件,去除所有噪音并只留下文件名,然后将该列表传递给rsync ... --files-from=FILE
.
它工作正常,直到有一个应该删除的文件:
*deleting Downloads/2022-09.pdf
好吧,rsync 抱怨丢失的文件并没有在目的地删除......
rsync: link_stat "/mnt/c/Downloads/2022-09.pdf" failed: No such file or directory (2)
有没有办法在不扫描所有文件两次的情况下重做空运行?
的输出
rsync
并不打算作为其对另一个实例的输入。您可能可以使用该--out-format
选项实现某些目标,但在标记已删除文件时它仍然会中断。扫描所花费的时间与复制所有文件所花费的时间相比应该是微不足道的,因此尽管看起来可能需要很长时间,但它仍然是比简单复制更好的优化。
结论?不要试图欺骗系统;只是让它
rsync
按照它想做的方式去做它做得好的事情。为提高效率,请确保您至少使用rsync -t
(--times
),并且您没有指定-c
(--checksum
),除非您真的了解非常罕见的必要情况。我见过太多人使用-c
,因为他们认为没有必要时使用它,并且它会减慢rsync
数百甚至数千倍的速度。(如有疑问,请将您的命令添加到问题中,我会对其进行审核。)