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

3두 번째 방법은 stdout을 일시적으로 어딘가( 이 경우 설명자) 로 리디렉션해야 하기 때문에 좀 더 복잡합니다.아니요에 전달하세요 grep.

관련 정보