파일이 아카이브인지 확인하고, 그렇다면 압축을 풀어보세요.

파일이 아카이브인지 확인하고, 그렇다면 압축을 풀어보세요.

파일이 아카이브인지 확인한 다음 를 사용하여 압축을 풀려면 어떻게 해야 합니까 7z? 명령을 통해 확인할 수 있다는 것을 알고 있지만 file출력 때문에 스크립트에서는 작동하지 않습니다. 어떤 유형의 아카이브인지 예측할 수 없습니다. 나는 단지 다음과 같은 일을 하고 싶습니다:

7z로 추출 가능한가요?
그렇다면 추출하고,
그렇지 않다면 추가로 추출합니다.

Bash 스크립트를 통해.

답변1

filename=/tmp/foo.gz

if 7z t $filename; then
    7z e $filename
else
    echo $filename not an archive.
fi

답변2

유틸리티에서 수행한 작업이 실패하면 7z0이 아닌 종료 코드가 반환됩니다. 아카이브를 추출한 후 실패할 경우 다른 작업을 수행하여 이 사실을 활용할 수 있습니다.

if ! 7z e filename 2>/dev/null; then
    # do something else
fi

혹은 그 밖에 하고 싶은 일과 하기 싫은 일에 따라

if 7z e filename 2>/dev/null; then
    exit
fi

# do something else

로 단축될 수 있다

7z e filename 2>/dev/null && exit

# do something else

분명히 그것을 포함시킬 수 있습니다

if 7z t filename; then

fi

그리고 이것이 실제로 아카이브인지 판단하는 실패와는 별도로 추출 실패(디스크 공간 부족이나 추출 중에 발생할 수 있는 기타 오류로 인해)를 캡처합니다 7z.

전체 코드는 다음과 같습니다.

if 7z t filename 2>/dev/null; then
    if 7z e filename 2>/dev/null; then
        echo 'All is good, archive extracted' >&2
    else
        echo 'Archive failed to extract' >&2
    fi
else
    echo '7z failed to process the file' >&2
fi

답변3

0이 반환 되면 7z t <archive>파일은 유효한 아카이브입니다.

관련 정보