我运行这个命令将一些文件从 Windows (Cygwin) 同步到我的本地 NAS:
rsync -PaSq --delete -e "/cygdrive/C/cygwin64/bin/ssh -i keyfile -p XXXX" "/source/" [email protected]:/destination/
我现在想用红色突出显示任何错误消息。我的意思是在 rsync 连接后突出显示错误,而不是 ssh 连接错误。
所以这个 ssh 连接错误信息保持不变:
ssh_exchange_identification: Connection closed by remote host
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.2]
但这以红色突出显示:
rsync: delete_file: unlink(test/test.txt) failed: Permission denied (13)
我试过以下没有运气。任何想法表示赞赏。
rsync -PaSq --delete -e "/cygdrive/C/cygwin64/bin/ssh -i keyfile -p XXXX" "/source/" [email protected]:/destination/ | tput setaf 1; sed -n '/rsync:/p'
rsync -PaSq --delete -e "/cygdrive/C/cygwin64/bin/ssh -i keyfile -p XXXX" "/source/" [email protected]:/destination/ | egrep --color '.*rsync:.*|$'
rsync -PaSq --delete -e "/cygdrive/C/cygwin64/bin/ssh -i keyfile -p XXXX" "/source/" [email protected]:/destination/ | grep --color=auto '.*rsync:.*|$'
您面临的问题来自将
rsync
错误输出到标准错误(文件描述符 2)的事实,但默认情况下管道仅传输标准输出(文件描述符 1),而标准错误不受影响。因此管道之后的命令(sed
或grep
在您的示例中)看不到来自rsync
.|&
您可以使用aka重定向标准输出和标准错误2>&1 |
。另一种方法是仅重定向 stderr,将 stdout 留在它指向的位置,因此请尝试以下操作:或者
第二种方法有点复杂,因为我们需要临时将 stdout 重定向到某个地方(
3
在本例中为描述符),以免将其传递给grep
.