O utilitário 7z
retorna um código de saída diferente de zero se a operação que ele executa falhar. Você pode usar esse fato para tentar extrair o arquivo e, em seguida, fazer outra coisa se isso falhar:
if ! 7z e filename 2>/dev/null; then
# do something else
fi
ou, dependendo do que mais você quer fazer ou não,
if 7z e filename 2>/dev/null; then
exit
fi
# do something else
que pode ser encurtado para
7z e filename 2>/dev/null && exit
# do something else
Você pode obviamente incluir isso em
if 7z t filename; then
fi
e detectar uma falha de extração (devido a espaço insuficiente em disco ou qualquer outro erro que possa ocorrer durante a extração) separadamente de uma falha na determinação de que esse é realmente um arquivo 7z
.
O código completo pode parecer
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