tar를 사용하여 2개의 명령을 연결합니다(wc -l + echo ok || echo failed)

tar를 사용하여 2개의 명령을 연결합니다(wc -l + echo ok || echo failed)

tar.gz 파일로 두 가지 작업을 수행하고 싶습니다.

  1. 이상이 없는지 확인
  2. 성공한 경우 - 추출된 파일 수를 확인하세요.

내가 찾은이것첫 번째 옵션의 경우. 이제 다음과 같이 명령을 실행합니다. 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포인트를 계산합니다. 이는 추출된 디렉토리의 경로 이름에 개행 문자가 포함되는 것을 방지하기 위해 수행됩니다.

관련 정보