답변:
경우 tar입력에서 발견 된 오류는 것이다 exit(3)0이 아닌 종료 값 ¹. 이 기능은 대부분의 tar구현에서로 아카이브 내용을 나열 할 때도 수행됩니다 t. 따라서 종료 값 tar을 확인하여 문제가 있는지 판단 할 수 있습니다.
if ! tar tf /root/archive.tar &> /dev/null; then
write_an_email_to_root
fi
당신이 경우 tar모든 오류를 발견하지 t, 당신은 여전히에 아카이브 추출 수 stdout및 리디렉션 stdout에 /dev/null느린하지만 더 신뢰할 수있는 방법이 될 것이다 :
if ! tar xOf /root/archive.tar &> /dev/null; then
write_an_email_to_root
fi
¹이 표기법은 실제 호출이 아니라 맨 페이지를 나타냅니다. 참조하십시오 man 3 exit.
tar구현이 모든 오류를 감지하거나보고 하지는 않습니다 t( bsdtar그렇지 않으면 사용할 수 tar xOf file.tar > /dev/null없습니다). 모든 tar구현이 종료 상태 2로 종료 되지는 않지만 star(255) ot bsdtar(1) 그렇지는 않지만 여기서 중요한 것은 종료 상태가 0이 아니라는 것입니다.
exit(2)나는 (내가 가진 이유»명시 적으로 다음 문장에서 언급 된 0이 아닌«인) 해당 맨 페이지가 아닌 정확한 종료 값에 대한했다. 이것에 주석을 달았습니다 (섹션을 올바른 것으로 변경했습니다 -.-).
죄송하지만, tar에는 테스트 기능이없는 것처럼 보입니다 (예 : * nix를 잊어 winrar로 테스트하려고하면 "이 유형의 아카이브에는 명령이 지원되지 않습니다").
위의 주석에서 지적한 바와 같이 tar에는 문자 그대로 비교 용어가있는 내부 CRC가 부족하므로 편집기로 tar 아카이브를 변경하면 나열 및 추출이 오류없이 완벽하게 작동하지만 손상된 데이터를 추출 할 수 있습니다
결론적으로, 나는 여기에 해결책을 기대하지만 결국 하나는 없지만 다행히 두 가지 좋은 소식이 있습니다.
다른 프로그램 (gzip, bzip2 등)으로 압축되지 않은 매우 희귀 한 tar 아카이브가 있으므로 프로그램에 테스트 솔루션이 있으며 압축하지 않은 사람들은 다소 절름발이입니다.
내 개인적인 문제 때문에 운이 좋았습니다. 추출 한 후 내부의 모든 파일에 대한 CRC가있는 md5sum 파일을 찾았습니다. 확인 가능)
다음 인수를 전달하여 수행 할 수 있습니다 tar.
$ tar -cvzf test.tar test_file
-c-f( 'test.tar') 를 통해 이름이 지정된 파일을 만듭니다 . -z아카이브를 gzip으로 압축합니다. -v그것을 장황하게 만듭니다. 이것이 정확한 해결책이 아니라고 확신합니다.
tar출력을 로 리디렉션하고/dev/null싶을 것입니다.