xzcmp
여러 XZ 파일을 비교하는 데 사용하고 있습니다 . 하지만 이상한 문제가 있습니다. 일부 파일(*)의 경우 xzcmp가 작동하지 않고 오류 메시지 없이 종료 코드 2를 반환합니다.
zxcmp version1.sql.xz version2.sql.xz
echo $? <-- 2
이 두 파일은 일반적으로 xz를 사용하여 추출할 수 있기 때문에 이 파일이 왜 특별한지 설명할 수 없습니다.
xz -dc version1.sql.xz > version1.sql
xz -dc version2.sql.xz > version2.sql
cmp version1.sql version2.sql
echo $? <-- 1. works!
/usr/bin/xzcmp를 디버깅한 결과 다음 명령이 실행되어 반환된 것을 확인했습니다.종료 상태 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
)
저는 솔직히 이 코드를 이해하지 못하며 대부분의 파일에서는 작동하지만 다른 파일에서는 작동하지 않는 이유를 알 수 없습니다.
저는 데비안 8을 사용하고 있습니다.
그러나 나는 다른 방법을 시도했습니다.
cmp <( xz -dc "version1.sql.xz" ) <( xz -dc "version2.sql.xz" )
echo $? <-- 1. works!
이 솔루션도 작동합니다. 하지만 이 간단한 변형에는 xz 실행 오류가 눈에 띄지 않는다는 큰 문제가 있습니다.
모든 팁을 높이 평가합니다.
(*) 죄송합니다. "일부 파일이 작동하지 않습니다"는 정보를 제공하지 않습니다. 모든 파일은 SQL 덤프이며 모두 xz, 압축 수준 3을 사용하여 압축됩니다. 유효한 파일과 유효하지 않은 파일 사이에는 유사성이 거의 없습니다.