rsync出力の特定の部分に色を付けるには?

rsync出力の特定の部分に色を付けるには?

このコマンドを実行して、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

32番目の方法は、stdoutを一時的にどこかに(この場合は記述子)にリダイレクトする必要があるため、もう少し複雑です。いいえに渡してくださいgrep

おすすめ記事