@derobert 의 답변은 훌륭하지만 내가 찾은 다른 정보를 공유하고 싶습니다.
gzip -l -v
gzip 압축 파일에는 이미 해시가 포함되어 있습니다 (안전하지는 않지만 이 SO post 참조 ).
$ echo something > foo
$ gzip foo
$ gzip -v -l foo.gz
method crc date time compressed uncompressed ratio uncompressed_name
defla 18b1f736 Feb 8 22:34 34 10 -20.0% foo
CRC와 압축되지 않은 크기를 결합하여 빠른 지문을 얻을 수 있습니다.
gzip -v -l foo.gz | awk '{print $2, $7}'
cmp
두 바이트가 같은지 여부를 확인하려면을 사용하십시오 cmp file1 file2
. 이제 gzip으로 압축 된 파일에는 데이터 및 바닥 글 (CRC + 원본 크기)이 추가 된 헤더가 있습니다. GZIP 파일 포맷의 설명 헤더 파일을 압축하고, 파일명은 10 바이트의 헤더 뒤에 첨부되는 문자열 NUL 종료되는 시간을 포함 보여준다.
따라서 파일 이름이 일정하고 동일한 명령 ( gzip "$name"
)이 사용되면 cmp
시간을 포함하여 첫 번째 바이트를 사용 하고 건너 뛰어 두 파일이 다른지 여부를 확인할 수 있습니다 .
cmp -i 8 file1 file2
참고 : 동일한 압축 옵션이 중요하다는 가정하에 그렇지 않으면 명령은 항상 파일을 다른 것으로보고합니다. 이는 압축 옵션이 헤더에 저장되어 압축 된 데이터에 영향을 줄 수 있기 때문에 발생합니다. cmp
원시 바이트 만보고 gzip으로 해석하지 않습니다.
길이가 같은 파일 이름이 있으면 파일 이름을 읽은 후 건너 뛸 바이트를 계산할 수 있습니다. 파일 이름의 크기가 다른 cmp
경우와 같이 바이트를 건너 뛴 후 실행할 수 있습니다 cmp <(cut -b9- file1) <(cut -b10- file2)
.
zcmp
이것은 가장 좋은 방법입니다. 먼저 데이터를 압축하고 바이트를 비교하기 시작합니다 cmp
(실제로 zcmp
( zdiff
) 셸 스크립트 에서 수행되는 작업입니다 ).
한 가지 참고 사항은 매뉴얼 페이지의 다음 참고 사항을 두려워하지 마십시오.
비교하기 전에 두 파일을 모두 압축 해제해야하는 경우 두 번째 파일은 / tmp로 압축 해제됩니다. 다른 모든 경우 zdiff 및 zcmp는 파이프 만 사용합니다.
충분히 새로운 Bash가 있으면 압축은 임시 파일을 사용하지 않고 파이프 만 사용합니다. 또는 zdiff
출처에서 알 수 있듯이
# Reject Solaris 8's buggy /bin/bash 2.03.