bash - grep 包含来自 rsync 输出的错误结果
问题描述
我有一个脚本可以使用rsync
. 因为我不想要完整的输出细节,所以我grep
只选择我想查看的摘要输出:
rsync -PaSh --stats --delete -e 'ssh -p XXXX -i key' /source/ user@X.X.X.X:/destination/ 2>> output.txt |
grep -e 'Number of regular files' -e 'Total transferred' -e 'bytes/sec'
>> output.txt
这会返回一个很好的摘要,例如:
Number of regular files transferred: 73
Total transferred file size: 165.68M bytes
sent 3.79M bytes received 207.71K bytes 103.89K bytes/sec
备份位置之一是 Firefox 配置文件,其中文件在浏览时经常更改。
这意味着rsync
当不再找到文件时抛出错误:file has vanished
.
我想排除这个错误,但由于某种原因,即使它不包含在错误消息中,它也会一直显示grep
:
file has vanished: "file1"
file has vanished: "file2"
file has vanished: "file3"
rsync warning: some files vanished before they could be transferred (code 24) at main.c(1207) [sender=3.1.3]
Number of regular files transferred: 73
Total transferred file size: 165.68M bytes
sent 3.79M bytes received 207.71K bytes 103.89K bytes/sec
有人可以帮忙吗?
谢谢
解决方案
管道|
将标准输出重定向stdout
到其他进程的标准输入stdin
。
然而,与标准输出并行的还有标准错误stderr
流。stdout
在文件描述符 1 上,stderr
在文件描述符 2 上。
要将文件描述符 2 重定向到文件描述符 1,请执行以下操作:
rsync .... 2>&1 | grep ...
更多信息可以在网上的各个地方找到,可能这方面的文档在posix shell 重定向中:
[...] 这些数字被称为“文件描述符”。值 0、1 和 2 具有特殊含义和常规用途,并且由某些重定向操作隐含;它们分别称为标准输入、标准输出和标准错误。程序通常从标准输入中获取输入,并将输出写入标准输出。错误消息通常写在标准错误上。[...]
推荐阅读
- javascript - 单击并拖动时,范围滑块 oninput 功能不执行
- xml - XML XSLT 转换。三种环境,三种不同的行数,使用 Oracle 的 xml util
- javascript - 未找到模块:错误:无法解析 vue,路径不正确
- r - 如何在函数中应用 ggtheme 并在图形上应用标签?
- apache-zookeeper - 删除具有 100,000 多个节点的 ZooKeeper 路径失败并出现 OutOfMemoryError
- java - Android Studio 设计选项卡空白,除了左上角的白点,不起作用,但在运行应用程序时工作正常
- java - Java - 引用一个子类到它的超类类型混淆
- bash - bash find 命令不适用于目录扫描
- javascript - 用动态内容反应 Swiper
- wordpress - 根据用户在产品页面中选择的选项将折扣添加到购物车