1. 使用-i选项

1. 使用-i选项

我对 rsync 有一个问题:它要么显示我正在 rsyncing 的目录中的所有文件(如果使用标志-v),要么什么都不显示(不使用时-v)。

我希望 rsync 安静下来除了实际必须上传到远端的文件。是否有标志可以激活此类报告?我在文档中找不到这个

答案1

是的,检查一下-i标志。它以神秘的格式提供每个操作的报告。请参阅手册页以了解格式的确切定义。

为了获取发送到远程主机的文件列表,您可以使用以下命令:

rsync <options> -i <src> <dst> | grep '^<' | awk '{ print $2 }'

答案2

带有单个文件的 rsync-v|--verbose实际上只打印传输的文件(以及页眉/页脚)。如果您每次都获得完整列表,则可能意味着默认的 rsync 源/目标比较算法(基于修改时间 + 大小)不适合您的情况。您可以添加-c( --checksum) 标志,使 rsync 通过校验和比较文件。请注意,这显然会产生一些 I/O 开销。

稍微相关的事实是,如果您使用--info=flist而不是,-v那么您将获得更简洁的文件输出(您基本上跳过了典型-v输出的页眉和页脚)。

答案3

1. 使用-i选项

对于这些图标化的(或:隐秘的)更改标志。您的输出将如下所示:

*deleting   DSC00012 (copy).JPG
.d..tp..... ./
.f...p..... DSC00011.JPG
>f+++++++++ DSC00012 (copy2).JPG
>f.stp..... DSC00012.JPG
.f...p..... DSC00014.JPG

Number of files: 5 (reg: 4, dir: 1)
Number of created files: 1 (reg: 1)
... more statistic stuff
sent 636.01K bytes  received 4.63K bytes  1.28M bytes/sec
total size is 2.84M  speedup is 4.44

2. grep 以点开头的每一行。

让所有其他行(包括空白行,以便于阅读)通过:

rsync -arz -i --stats -h ... /mnt/FooDrive/ /mnt/backup  | grep -E '^[^.]|^$'

现在我们到了 :-) — 正如医生所要求的:

*deleting   DSC00012 (copy2).JPG
>f.stp..... DSC00011.JPG
>f+++++++++ DSC00012 (copy).JPG

Number of files: 5 (reg: 4, dir: 1)
Number of created files: 1 (reg: 1)
...

避免点而不是寻找 >其好处不仅是让统计数据通过,还让潜在的错误、警告等通过......

在末尾显示统计数据是个人喜好。-h --stats如果您不喜欢这些,请不要使用。我猜您的主要兴趣是不会看到数百或数千个未更改的文件滚动...

答案4

我认为没有标志可以执行此操作,但现在可能有。这是我执行的方式:

rsync -vv [other options] | grep -v 'uptodate'

相关内容