如何通过单个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在传输结束后输出包含文件传输数量的统计信息。
- 保留了原命令1的
tee >(...):这是bash的进程替换技巧,它会把rsync的输出同时做两件事:- 直接输出到终端,让你看到传输过程的所有日志;
- 把输出传给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
相关产品推荐
相关产品推荐

