如何过滤Cygwin与Rsync日志中的不必要条目?
解决rsync日志冗余条目过滤问题
修改思路
rsync的--log-file参数是直接将日志写入文件,无法中途过滤内容。因此需要调整命令,让rsync将日志输出到标准输出/错误流,通过grep过滤冗余条目后再写入日志文件。
修改后的脚本命令
rsync --times --update --remove-source-files -r -e "ssh -i /cygdrive/c/users/administrator/.ssh/id_rsa" ubuntuuserXYZ@192.168.1.1:/home/sftpuser/sourcefolder/ /cygdrive/e/destfolder --out-format="%t [$$] %o %f %l bytes" 2>&1 | grep -v -E 'receiving file list|sent [0-9]+ bytes received [0-9]+ bytes total size 0' >> "/cygdrive/c/tools/sftp/rsync_in.log"
关键修改说明
- 移除
--quiet:让rsync输出原本写入日志的内容到控制台,否则会抑制日志输出。 - 移除
ssh -v:去掉SSH的调试输出,避免额外冗余;若需保留SSH调试信息,可保留-v,但需确保过滤规则不会误删有用内容。 - 替换
--log-file和--log-file-format为--out-format:指定输出到标准输出的日志格式,[$$]会替换为当前rsync进程ID,和原日志的进程ID格式保持一致。 2>&1:将标准错误流重定向到标准输出,确保所有rsync相关输出都能被grep处理。grep -v -E '...':-v:反向匹配,排除符合规则的行;-E:支持扩展正则表达式,同时匹配两条冗余条目;- 正则规则精准匹配你提到的两行冗余内容,确保只过滤目标条目。
>>:以追加模式写入日志文件,适合高频运行的计划任务,避免覆盖历史日志。
可选优化
如果需要确保日志文件不会无限增大,可以配合logrotate工具定期轮转日志(需在Cygwin环境中配置),避免磁盘空间占用过高。
内容的提问来源于stack exchange,提问作者Daniel4711
相关产品推荐
相关产品推荐

