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