cpio에서 제공하는 "차단" 메시지를 제거하는 방법은 무엇입니까?

cpio에서 제공하는 "차단" 메시지를 제거하는 방법은 무엇입니까?

나는 이것을 보려고 노력하고 있습니다 :디렉토리 내용의 MD5 합계를 합계로 얻는 방법은 무엇입니까?, 그래서 저는 다음을 시도하고 있습니다.

$ find | LC_ALL=C sort | cpio -o | md5sum
25324 blocks
6631718c8856606639a4c9b1ef24d420  -

흠... 출력에 다른 것이 아닌 해시만 원합니다... 따라서 "25324 청크"가 stderr에 인쇄되었다고 가정하고 stderr를 다음으로 리디렉션하려고 했습니다 /dev/null.

$ find | LC_ALL=C sort | cpio -o | md5sum 2>/dev/null 
25324 blocks
6631718c8856606639a4c9b1ef24d420  -

아니요, 그렇지 않습니다. 테스트 목적으로 stdout을 다음으로 리디렉션해 보겠습니다 /dev/null.

$ find | LC_ALL=C sort | cpio -o | md5sum 1>/dev/null 
25324 blocks

좋습니다. 해시는 예상대로 사라졌지만 "청크" 메시지는 남아 있습니까? ! 파일 설명자 3을 통해 인쇄된 "25324 블록"은 정확히 어디에 있습니까? ! :

$ find | LC_ALL=C sort | cpio -o | md5sum 3>/dev/null 
25324 blocks
6631718c8856606639a4c9b1ef24d420  -

아니요, 그게 아닙니다... 어쨌든 awk를 사용하여 해시를 얻을 수 있습니다.

$ find | LC_ALL=C sort | cpio -o | md5sum | awk '{print $1}'
25324 blocks
6631718c8856606639a4c9b1ef24d420

하지만 빌어먹을 "청크" 메시지는 여전히 인쇄됩니다. 그러면 터미널에 어떻게 인쇄합니까(stdout이나 stderr를 통해 인쇄되지 않는 것 같으니). 그리고 메시지를 어떻게 억제합니까?


편집: 답을 찾았습니다. "청크" 메시지가 cpio실제로 인쇄되므로 올바른 작업은 다음과 같습니다.

$ find | LC_ALL=C sort | cpio -o 2>/dev/null | md5sum | awk '{print $1}'
6631718c8856606639a4c9b1ef24d420

이제 해시만 남았습니다...

답변1

메시지는 에 의해 인쇄되며 cpio이를 방지합니다.

find | LC_ALL=C sort | cpio -o 2> /dev/null | md5sum | awk '{print $1}'

cpio이 방법을 사용하면 인쇄된 오류 메시지가 손실됩니다. 일부 버전 cpio(적어도 GNU 및 FreeBSD)은 다음 quiet옵션을 지원합니다.

find | LC_ALL=C sort | cpio -o --quiet | md5sum | awk '{print $1}'

cpio지원되지 않는 버전 오류가 누락되는 것을 방지하려면 --quiet해당 오류를 임시 파일에 기록할 수 있습니다.

cpiolog=$(mktemp); find | LC_ALL=C sort | cpio -o 2> "${cpiolog}" | md5sum | awk '{print $1}'; grep -v blocks "${cpiolog}"; rm -f "${cpiolog}"

답변2

이 메시지는 에 의해 인쇄됩니다 cpio. GNU cpio 또는 FreeBSD cpio를 사용하여 --quiet이를 억제하는 옵션을 전달하십시오.

아니면 cpio를 버리고 대신 표준 pax나 더 일반적인 tar를 사용하세요.

관련 정보