Estou usando xzcmp
para comparar vários arquivos XZ. Mas eu tenho um problema estranho: para alguns arquivos (*), o xzcmp não funciona e retorna o código de saída 2, sem mensagem de erro.
zxcmp version1.sql.xz version2.sql.xz
echo $? <-- 2
Não sei explicar por que esses arquivos são especiais, já que ambos os arquivos podem ser extraídos normalmente usando xz.
xz -dc version1.sql.xz > version1.sql
xz -dc version2.sql.xz > version2.sql
cmp version1.sql version2.sql
echo $? <-- 1. works!
Eu depurei / usr / bin / xzcmp e descobri que o seguinte comando é executado e retorna status de saída 141 :
elif # Reject Solaris 8's buggy /bin/bash 2.03.
echo X | (echo X | eval "$cmp" /dev/fd/5 - >/dev/null 2>&1) 5<&0; then
xz_status=$(
exec 4>&1
($xz1 -cdfq -- "$1" 4>&-; echo $? >&4) 3>&- |
( ($xz2 -cdfq -- "$2" 4>&-; echo $? >&4) 3>&- 5<&- </dev/null |
eval "$cmp" /dev/fd/5 - >&3) 5<&0
)
Para ser honesto, não entendo esse código e não consigo descobrir por que ele funciona para a maioria dos arquivos e não funciona para outros arquivos.
Estou usando o Debian 8.
Já tentei outra coisa:
cmp <( xz -dc "version1.sql.xz" ) <( xz -dc "version2.sql.xz" )
echo $? <-- 1. works!
Esta solução também funciona. Mas essa variante simples tem o grande problema que erros na execução do xz não serão percebidos ...
Cada dica é muito apreciada.
(*) Lamento que "Alguns arquivos não funcionam" não é informativo. Todos os arquivos são dumps SQL e foram todos compactados usando xz com nível de compactação 3. Quase não há semelhanças entre arquivos que funcionam e arquivos que não funcionam.
Tags bash compression debian xz