我的每周备份脚本包含一堆 bash 语句,如下所示:
rsync -va /source_path/ /destination_path/
现在,这很好用,但 -v (详细)选项的行为并不完全符合我的要求。我想要的是它应该只显示正在复制的已更改文件,而不是它扫描的每个文件夹。
例如,如果document1
和document2
文件夹没有变化,但是 中的一个文件发生了变化document3
,则显示如下:
document1/
document2/
document3/
document3/foo.txt
如果我-v
完全省略该选项,它会完全静音并且根本不显示任何内容。我想要输出显示,但我只对最后一行(foo.txt)感兴趣,这是正在复制的文件,而不是rsync
扫描的数十个文件夹,例如 document1、document2 等。
有什么办法可以做到吗?
答案1
你的描述已经是如何rsync
工作了。它使用 -v 显示的唯一文件是正在传输或更改的文件。因此,每次运行时,它都会看到目录存在一些差异。
造成这种情况的一个常见原因是源和目标位于不同的文件系统上,并且无法准确复制所有权或权限,并且每次调用都试图这样做。
要确认这一点,请运行rsync
with -i
(或--itemize-changes
)。这将显示一个代码,显示rsync
决定文件需要工作的原因。如果它是所有权或其他信息(并且您决定不需要此信息),您可以关闭其与--no-owner
或类似信息的同步。