我对 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'