2010-12-10 5 views
0

GZIP는과 같이 각 파일의 체크섬을 줄 것이다 : 나는 같은 체크섬을 유도 할 수있는 외부 도구를gzip -lv에 일치 체크섬을 줄 수있는 외부 도구가 있습니까? -l 및 -v 옵션을 부여 할 때

$ echo foo > foo 
$ gzip foo 
$ gzip -lv foo.gz 
method crc  date time   compressed  uncompressed ratio uncompressed_name 
defla 7e3265a8 Dec 10 17:37     28     4 150.0% foo 

있습니까?

md5sum, cksumsum은 비슷한 역할을하지만 일치하는 코드는 제공하지 않습니다 (3915528286의 16 진수는 e962385e 임).

$ echo foo > foo 
$ md5sum foo 
d3b07384d113edec49eaa6238ad5ff00 foo 
$ cksum foo 
3915528286 4 foo 
$ sum foo 
00106  1 



응용 프로그램에


추가 세부

:


우리는 많은 대형 파일이있는 파일 시스템을 가지고, 새로운 파일이 지속적으로 복사됩니다. 들어오는 파일 중 일부는 이미 존재하는 파일과 일치합니다.이 경우 기존 파일을 단순히 하드 링크하여 디스크 공간을 절약하고 싶습니다. 압축을 푼 파일의 경우 md5sum을 사용하여이 비교를 빠르고 효율적으로 수행 할 수 있습니다. 다른 한편, gzip 된 파일은 동일한 데이터에 대해 종종 다른 md5sum을가집니다 (타임 스탬프 또는 소유자로 인해이 응용 프로그램에서는 관련이 없습니다). gzip이 내부 데이터에 대한 체크섬을 제공하므로 두 개의 gzip 된 파일에 대해 체크섬과 크기 목록을 비교할 수 있습니다.

또한 gzip 파일을 '정상'파일과 비교하는 것을 지원하고 싶습니다.이 경우 gzip에서 외부 적으로 동일한 체크섬을 생성하는 유틸리티가 필요합니다. 단순한 솔루션은 비교하기 전에 항상 일반 파일을 gzip으로 만드는 것이지만이 시스템은 현재 CPU 시간에 의해 병목 현상이 발생하므로 오버 헤드를 피하고 싶습니다.

답변

2

긴 이야기는 짧게, 나는, CKSUM의 소스에 비해, GZIP의 소스를 통해 간 일부 수정 한 다음 jacksum가 GZIP과 같은 구현을 사용하는 것을 알아 냈다.

그래서 jacksum을 사용하십시오. :)

호출 : jacksum -a CRC32 파일 이름

+0

정확히 내가 무엇을 찾고 있었습니까. 감사! 답변을 수락하기 전에 일부 bechmarks를 보겠습니다. – bukzor

1

난 그냥 몇 가지 벤치 마크를 실행하고, jacksum 꽤 좋은 동안, 그것은 다소 시간이 오래 걸리고 cksfv보다 훨씬 더 많은 메모리를 사용합니다.

이 벤치 마크는 cat /dev/urandom에 의해 생성 된 네 공연 파일에에 버추얼 박스 우분투 VM에서 수행되었다. "실제"기계에서 훨씬 더 좋은 속도를 얻을 수 있지만, 같은 비율이어야합니다.

gzip으로/임시 파일 방법은 디스크 공간이 부족하지만, 이미 두 배의 시간 이상 사용했기 때문에 나는 걱정하지 않는다.

$ cksum random.dat 
1591530146 4388388864 random.dat 
5.78user 7.42system 2:53.62elapsed 7%CPU (0avgtext+0avgdata 2896maxresident)k 
8480936inputs+0outputs (0major+225minor)pagefaults 0swaps 

$ md5sum random.dat 
3d6f60f84b2289992abd66428e8a73c4 random.dat 
5.57user 8.25system 2:25.97elapsed 9%CPU (0avgtext+0avgdata 2656maxresident)k 
8480960inputs+0outputs (1major+209minor)pagefaults 0swaps 

$ jacksum -x -a crc32 random.dat 
c93b4e20  4388388864  random.dat 
3.65user 10.82system 2:19.69elapsed 10%CPU (0avgtext+0avgdata 52224maxresident)k 
8490688inputs+152outputs (60major+3936minor)pagefaults 0swaps 

$ cksfv random.dat 
; Generated by cksfv v1.3.14 on 2010-12-11 at 12:06.31 
; Project web site: http://www.iki.fi/shd/foss/cksfv/ 
; 
;  93421568 11:16.12 2010-12-11 random.dat 
random.dat C93B4E20 
4.42user 8.65system 2:14.42elapsed 9%CPU (0avgtext+0avgdata 2048maxresident)k 
8480944inputs+0outputs (1major+171minor)pagefaults 0swaps 

$ bash -c gzip -c random.dat > temp.gz && gzip -lv temp.gz 

gzip: stdout: No space left on device 
Command exited with non-zero status 1 
55.54user 6.68system 4:31.56elapsed 22%CPU (0avgtext+0avgdata 4992maxresident)k 
2596536inputs+2689840outputs (3major+695minor)pagefaults 0swaps 

제 생각에는 cksfv입니다.