파일이 아카이브인지 확인한 다음 를 사용하여 압축을 풀려면 어떻게 해야 합니까 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
유틸리티에서 수행한 작업이 실패하면 7z
0이 아닌 종료 코드가 반환됩니다. 아카이브를 추출한 후 실패할 경우 다른 작업을 수행하여 이 사실을 활용할 수 있습니다.
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>
파일은 유효한 아카이브입니다.