このコマンドを実行して、Windows(Cygwin)の一部のファイルをローカルNASに同期します。
rsync -PaSq --delete -e "/cygdrive/C/cygwin64/bin/ssh -i keyfile -p XXXX" "/source/" [email protected]:/destination/
今、すべてのエラーメッセージを赤で強調表示したいと思います。 SSH接続エラーではなく、rsync接続後にエラーを強調表示することを意味します。
したがって、この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:.*|$'
答え1
直面している問題は、rsync
エラーを出力するために発生します。標準エラー(ファイル記述子 2)、しかし、基本的にパイプは転送だけです。標準出力(ファイル記述子1)、標準エラーは変更されていません。したがって、パイプの背後にあるコマンド(sed
またはgrep
あなたの場合)にrsync
。
|&
akaを使用してstdoutとstderrをリダイレクトできます2>&1 |
。別の方法は、stderrをリダイレクトし、stdoutが指す位置をそのままにすることです。以下を試してください。
rsync ... |& grep --color '.*rsync:.*'
または
{ rsync ... 2>&1 >&3 3>&- | grep --color '.*rsync:.*' 3>&-; } 3>&1
3
2番目の方法は、stdoutを一時的にどこかに(この場合は記述子)にリダイレクトする必要があるため、もう少し複雑です。いいえに渡してくださいgrep
。