You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过单个rsync命令同时获取两种输出结果

如何通过单个rsync命令同时获取两种输出结果

我来帮你解决这个问题!你想要用单个rsync命令同时拿到传输过程的详细日志、执行耗时统计,以及传输的常规文件数量,其实只需要把两个命令的关键参数结合起来,再用一点bash的管道技巧就能实现。

先确认你的环境信息(方便其他读者参考):

# 系统信息
OS: Kubuntu 22.04.3 LTS x86_64
Shell: bash 5.1.16
# rsync版本
rsync  version 3.2.7  protocol version 31

你的变量定义:

src1=$(cat /tmp/01/sdk1_usb_disk)
des1='/media/u3/A1000G/Data/backupUSB2'

合并后的命令

直接用这一条命令就能满足需求:

time rsync -ah --delete-before --no-perms --info=progress2 --stats --out-format='%t %i %C %b %n %l' "$src1/" "$des1" | tee >(awk '/Number of regular files transferred:/{print $NF " regular files transferred"}')

命令细节解释

  • time:保留你需要的执行耗时统计(real/user/sys时间),它会包裹整个rsync命令,所以耗时信息会在所有传输输出之后显示。
  • rsync参数整合:
    • 保留了原命令1的-ah --delete-before --no-perms --info=progress2 --out-format='...',确保输出传输进度、文件变更的详细记录。
    • 添加了原命令2的--stats参数,让rsync在传输结束后输出包含文件传输数量的统计信息。
  • tee >(...):这是bash的进程替换技巧,它会把rsync的输出同时做两件事:
    1. 直接输出到终端,让你看到传输过程的所有日志;
    2. 把输出传给awk,awk从中匹配Number of regular files transferred:这一行,提取最后一个字段(就是传输的文件数量),然后按照你想要的格式打印出来。

预期输出

执行后会得到和你示例完全一致的结果:

165.07K   0%  126.17MB/s    0:00:00 (xfr#1, to-chk=593/602)
2023/09/27 21:44:10 >f.st...... 22f876f17e77fb91281260a65f457f3b 165133 b.sh 165070
2023/09/27 21:44:10 .d..t......                                  0 Misc/ 8192
165.85K   0%   25.38MB/s    0:00:00 (xfr#2, to-chk=215/602)
2023/09/27 21:44:10 >f.st...... 82dd3c8f657dee803b755955c146816c 827 Misc/c.txt 784
165.85K   0%   10.58MB/s    0:00:00 (xfr#2, to-chk=0/602)
real    0m0.108s
user    0m0.020s
sys     0m0.018s
2 regular files transferred

备注:内容来源于stack exchange,提问作者joseph22

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 12:13:04