能让 rsync 只输出传输摘要(不逐文件刷屏)吗?
可以:rsync 加 --stats 在结束时输出传输统计摘要(文件数、字节数、速度等),不加 -v 即可避免逐文件输出;要更安静用 -q。本文给出常用输出级别组合。
做法:加 --stats 选项,并且不要加 -v——rsync 默认只输出错误,结束时 --stats 会打印一份摘要:传输文件数、总字节数、实际传输量、速度等;具体字段随版本变化,不保证有完整作业耗时。想彻底安静用 -q(连错误之外的一切都静默)。
基本用法
rsync -a --stats /src/dir/ /dst/dir/
输出示例(结尾处):
Number of files: 12,430
Number of files transferred: 152
Total file size: 4.21G bytes
Total transferred file size: 96.4M bytes
Literal data: 96.4M bytes
Matched data: 0 bytes
File list size: 287K
Total bytes sent: 97.1M
Total bytes received: 3.2K
sent 97.1M bytes received 3.2K bytes 12.9M bytes/sec
total size is 4.21G speedup is 43.36
关键指标:传输文件数、逻辑文件大小与实际发送/接收字节数。speedup 是总文件大小除以发送加接收字节数,不是耗时加速倍数。
输出级别菜单
| 选项组合 | 输出内容 |
|---|---|
| (默认) | 只有错误 |
--stats |
错误 + 结尾统计摘要 |
-v |
逐文件列表 |
-v --progress |
逐文件 + 每个文件进度条 |
-q |
抑制非错误消息,错误仍可输出 |
--stats -h |
摘要用人类可读单位(K/M/G) |
脚本中的推荐姿势
备份/同步脚本里既要不刷屏、又要留痕:
rsync -a --stats --log-file=/var/log/rsync-backup.log /src/ /dst/
详细进日志文件,终端只看摘要;cron 仍可能将终端摘要作为邮件发送;不需要邮件时须重定向 stdout 或配置 MAILTO。
常见问题(FAQ)
Q:--stats 里的 total size 和 transferred 差很多?
A:正常。total 是文件列表中的逻辑总大小,Total transferred file size 是此次传输文件的完整逻辑大小,不是网络传输量;网络量看 Total bytes sent/received。未变化文件被跳过也会提高 speedup,不能仅凭它认定增量算法收益。
Q:想要"只列出会传什么"但不真传?
A:加 -n(dry run)配 -i(变更原因),先看清单再真跑。
Q:摘要能输出成机器可解析格式吗?
A:rsync 没有 JSON 输出;脚本里解析 --stats 文本或改用 rsync --out-format 自定义逐条格式后自行聚合。