생성 날짜 만 다른 소스 파일에 대해 100 % 동일한 압축 파일을 얻는 방법은 무엇입니까?


8

파일을 무손실로 압축하고 싶습니다 . 원본 파일이 다른 사용자의 파일과 동일하면 원본 파일 날짜가 다른 경우에도 압축 파일이 모두 일치하기를 원합니다 .

압축하는 동안 최대 1GB의 RAM을 사용하고 싶습니다. 내가 가진 파일이 상당히 커서 비대칭 알고리즘에 기대어 있고 1GB RAM을 가진 P4 시스템에서 7-zip의 LZMA1 "ultra"로 압축하는 데 적어도 1 시간이 걸리며 실행되는 것은 없습니다. 7-zip과 FreeARC를 내 목적으로 사용할 수 있다고 생각합니다. 사용해야 할 명령을 찾으려고 노력했지만 운이 좋지 않습니다.

편집 : 생성 날짜가 다른 경우에도 100 % 동일한 파일을 생성해야합니다. 이것은 Freearc의 --nodates를 통해 가능하며 ???? 7 개의 지퍼로. 7-zip에 해당하는 명령과 여러 컴퓨터에서 압축을 표준화하는 방법을 찾고 있습니다.


1
LZMA가 결정 론적이라고 확신하십니까?
Ignacio Vazquez-Abrams

2
운이 많지 않은 부분 확장하십시오 .
fideli

2
질문이 어디 있어요? 압축 프로그램은 특별히 손실되지 않는 한 손실이 없어야합니다.
추후 공지가있을 때까지 일시 중지되었습니다.

답변:


11

동일한 파일 몇 개를 만듭니다.

$ echo hello > file1.test
$ echo hello > file2.test

gzip 그들 ...

$ gzip file1.test
$ gzip file2.test

타임 스탬프 필드를 유일한 차이점으로 관찰하십시오.

$ hexdump file1.test.gz

0000000 8b1f 0808 TIME STMP 0300 6966 656c 2e31
0000010 6574 7473 cb00 cd48 c9c9 02e7 2000 3a30
0000020 0636 0000 0000                         

타임 스탬프에 대한 자세한 내용은 RFC를 참조하십시오.

이제 바이트 8 이후에 시작하는 MD5를 가져와 파일에서이 4 바이트를 0으로 만들고 타임 스탬프를 잃거나 gzip에서 CRC16을 추출 할 수 있습니다 (이 추출 방법에 대한 정보는 RFC 참조).

또는 타임 스탬프없이 저장할 수 있습니다.

$ echo test > file1.test
$ echo test > file2.test
$ gzip -n file1.test
$ gzip -n file2.test
$ md5sum file1.test.gz
cfe4ddf1c4c3891b4ff4a1269b42db82  file1.test.gz
$ md5sum file2.test.gz
cfe4ddf1c4c3891b4ff4a1269b42db82  file2.test.gz

1
또한 gzipWindows에 사용할 수있는 다른 포트가 없으면 Cygwin에서 제공합니다.
Arjan

3

귀하의 질문에 대한 직접적인 답변은 아니지만 어쨌든 도움이 될 수 있습니다.

오래 전에 (다른 밀레니엄) 나는 같은 문제가있었습니다. 압축을 풀고 비교하지 않고 압축 파일이 동일한 지 알고 싶었습니다.

우리의 해결책은 파일을 압축하기 전에 파일 의 md5sum 을 얻은 다음 파일을 압축하고 이름을 md5sum.zip (.zip 또는 .tar.gz 또는 .rar 또는 .whatever)로 바꾸는 것 입니다. 그렇게하면 두 파일이 같은 이름 (접미사없이) 인 경우 동일한 위치에 있다는 것을 알았습니다.


2
물론, 우리는 ;-) 라고 가정 해야한다는 것을 알았지
Arjan

압축률과 완전히 독립적이므로 다른 프로그램에서 만들거나 다른 설정을 사용하여 압축 된 파일은 여전히 ​​동일한 것으로 인식 될 수 있습니다.
Arjan

1
이 기사는 거의 같은 문제를 해결하려고 시도합니다 ... medium.com/@mpreziuso/…
XCore

2

pristine-tar 에는 항상 동일한 결과 (bzip2의 경우)를 생성하는 해킹 된 gzip 버전이 있습니다. 알고리즘 변형과 타임 스탬프를 선택하면 좋습니다.


1

7-zip 소스를 해킹하십시오. 파일 날짜를 읽는 경우 코드를 삽입하여 날짜를 01.01.1997으로 변경하거나 다른 모든 파일에 대해 수정하십시오. 다른 이름으로 컴파일하여 사용하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.