답변:
경우 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
싶을 것입니다.