tar.gz 파일로 두 가지 작업을 수행하고 싶습니다.
- 이상이 없는지 확인
- 성공한 경우 - 추출된 파일 수를 확인하세요.
내가 찾은이것첫 번째 옵션의 경우. 이제 다음과 같이 명령을 실행합니다. tar -xvzf bad_file.tar.gz && echo ok || echo fail
마지막에 모든 오류 + 실패를 표시합니다. 이것이 바로 제가 원하는 것입니다.
tar -xvzf bad_file.tar.gz | wc -l
두 번째 부분에서는 잘 작동했지만 오류가 발생해도 파일 수를 반환하는 것을 사용했습니다 .
두 번째 부분의 예(편집기에서 파일을 열고 한 줄만 삭제했습니다):
[root@zt avi]# tar -xvzf damaged_file.tar.gz | wc -l
gzip: stdin: invalid compressed data--crc error
gzip: stdin: invalid compressed data--length error
tar: Unexpected EOF in archive
tar: Unexpected EOF in archive
tar: Error is not recoverable: exiting now
3
이 두 명령을 결합하는 방법은 무엇입니까?
답변1
아카이브 추출을 개별적으로 테스트하고 성공하면 파일 수를 계산합니다. 아카이브가 추출된 디렉토리의 이름을 모르는 경우 새 디렉토리를 생성하고 해당 디렉토리에 아카이브를 추출하십시오. 어쩌면 다음과 같은 것일 수도 있습니다.
#!/bin/sh
if [ -d extracted ]; then
echo 'please remove directory "extracted"' >&2
exit 1
fi
mkdir extracted
if ! tar -xvz -f bad_file.tar.gz -C extracted; then
echo 'extraction failed' >&2
echo 'directory "extracted" may contain partially extracted archive' >&2
exit 1
fi
# extraction of archive was successful, count files extracted
find extracted -type f -exec echo . ';' | wc -l
마지막으로 find
디렉토리의 각 파일에 대해 점을 출력합니다 extracted
. wc -l
포인트를 계산합니다. 이는 추출된 디렉토리의 경로 이름에 개행 문자가 포함되는 것을 방지하기 위해 수행됩니다.