GUI로 생성 된 ZIP 파일은 셸에서 생성 된 ZIP 파일보다 많은 바이트를 가지고 있습니다.


15

나는 두 가지를 창조했다. 지퍼 동일한 디렉토리의 파일. 하나는 GUI이고, 다른 하나는 다음과 같습니다.

$ zip -r alpha_cmd.zip Alpha

그만큼 알파 디렉토리는 33.640 MB이고 항목은 164 개입니다.

GUI로 작성된 ZIP 파일은 명령 행에서 작성된 ZIP 파일보다 2,100Y이 트입니다.

왜 GUI로 생성 된 ZIP 파일이 더 커질까요?

노트 : ZIP 파일의 크기가 다르더라도 압축을 풀면 각 디렉토리의 바이트 수는 똑같습니다. 기본적으로 GUI와 셸 명령을 사용하여 파일 시스템을 관리함으로써 발생할 수있는 불일치를 매우 조심합니다.


하나는 보이지 않는 파일을 가질 수 있고 다른 하나는 그렇지 않을 수 있습니다.
Tetsujin

이것으로부터 SU 대답 시험 ditto -ck --rsrc --sequesterRsrc --keepParent folder folder.zip
Mark

@ 마크 응답하는 것을 잊어 버렸습니다. "ditto"명령은 Finder와 똑같은 파일을 만듭니다. 그리고 위 / zip / "Finder ZIP"파일은 모두 크로스 플랫폼입니다. 시간과 노력에 감사드립니다.
david

답변:


20

Finder에서 압축하면 Mac에서 보이지 않는 폴더 인 __MACOSX 폴더가 추가되며 여기에는 사용자 지정 아이콘과 같은 OS X 리소스 포크가 포함됩니다. 에서 위키피디아 :

리소스 포크는 구조적 데이터를 데이터 포크에 저장된 비정형 데이터와 함께 저장하는 데 사용되는 Apple Mac OS 운영 체제의 파일 포크 또는 섹션입니다. 리소스 포크는 아이콘 비트 맵, 창의 모양, 메뉴 및 내용의 정의, 응용 프로그램 코드 (기계 코드)와 같은 세부 정보가 들어있는 특정 양식의 정보를 저장합니다. 예를 들어, 워드 프로세싱 파일은 동일한 파일의 리소스 포크에 포함 된 이미지를 저장하는 동안 텍스트를 데이터 포크에 저장할 수 있습니다. 리소스 포크는 주로 실행 파일에서 사용되지만 모든 파일은 리소스 포크를 가질 수 있습니다.


6
사소한 수정 : 리소스 포크뿐만 아니라 zip 형식이 기본적으로 처리하지 않는 모든 종류의 파일 메타 데이터입니다. AppleDouble 체재. 여기에는 주목할만한 의견, 태그, Finder 플래그, 격리 데이터 등뿐만 아니라 리소스 포크가 포함됩니다.
Gordon Davisson

그리고 나는 대부분의 zip에서 "__MACOSX"폴더가 무엇인지 궁금 해서요 ... 아시다시피, 어?
Ave

답을 밝히는 다른 참고 문헌 : stackoverflow.com/questions/107903/...
D A Vincent

4

이 경우의 주된 원인 (엠페도클 (Empedocle)이 말한 것처럼 추가 숨겨진 것들을 추가하는 파인더)을 제외하고, 동일한 데이터의 ZIP에 대한 서로 다른 크기는 크기 차이가 몇 퍼센트에 불과할 때 문제를 나타내지 않습니다.

다른 ZIP 구현은 다른 기본 압축 수준 (CPU 시간과 크기 저장간에 균형을 유지함)을 가질 수도 있고 일치 항목을 더 많이 저장하거나 적게 저장하는 다른 코드를 사용하여 기본 압축 수준에서 더 많거나 적은 바이트를 절약 할 수 있습니다.

예를 들어, 7-Zip 보통 더 작게 만든다. .zip 다른 ZIP 프로그램보다 (그리고 아니, 나는 그 자체에 대해서 이야기하는 것이 아니다. .7z 파일 형식. 더 나은 일반 ZIP 압축기도 있습니다.)

zipcmp ZIP 파일을 비교할 수있는 cmdline 프로그램입니다. 기본적으로 ZIP 디렉토리 만 비교하여 모든 파일의 이름, 크기 및 크기가 동일한 지 확인합니다. CRC . 이 경우, ZIP 파일은 거의 동일한 내용을 가지고 있지만 압축 된 크기가 다른 경우 다르게 압축됩니다. ZIP 파일이 손상되지 않는 한. 용도 unzip -t foo.zip 압축 해제 오류, 일치하지 않는 CRC 등에 대한 ZIP 파일 테스트


__MACOSX 폴더가 CRC 계산에 영향을 미치지 않습니까?
Kent

1
ZIP은 압축 된 각 파일의 압축되지 않은 내용을 별도의 CRC로 저장합니다. (두 가지 이유로 디렉터리는 자신의 데이터 블록이 아닌 다른 파일 만 포함하고 ZIP 메타 데이터에 저장된 CRC는 각 파일별로 따로 따로 있습니다.) 그래서 같은 두 개의 ZIP 파일이 CRC와 압축 해제 된 크기로 일치합니다.
Peter Cordes

@PeterCordes 다른 ZIP 구현이 다른 파일 크기를 생성 할 수 있다는 사실이 내 관심을 끌었다. 나는 쉘이 "/ usr / bin / zip"을 실행했다는 것을 알고있었습니다. Finder가 나에게 다른 파일 크기를 주었기 때문에 Finder가 완전히 다른 실행 파일을 사용했다고 생각했습니다. (그것은 저에게 화가났습니다). 내가 루트를 su하는 법을 알고 용기를 가지고 있다면 "/ usr / bin / zip"을 "/ tmp"로 옮긴 다음 Finder zip을 시도해보십시오. 하지만, 할 일이 있었고 Mac을 불안정하게 만들 위험이 없습니다!
david

일시적으로 교체하는 가장 안전한 방법 /usr/bin/zip 다른 버전으로 ln /usr/bin/zip /usr/bin/zip.standard; mv new_zip /usr/bin/zip. 그런 식으로, 당신은 항상 /usr/bin/zip왜냐하면 시스템 구현을 원자 적으로 바꾸기 때문입니다. 또한 이전 버전은 방금 이름이 바뀌 었습니다. /tmp (아마도 다른 파일 시스템에있을 수도 있습니다.) 비활성화하려면, zip.disabFinder가 중단되는지 확인한 다음 다시 이름을 바꿉니다. 그러나 zip-creation 라이브러리 함수는 일반적입니다. Finder는 거의 확실하게 포크 / 실행하지 않습니다. /usr/bin/zip.
Peter Cordes

@PeterCordes 실행 파일 대신 라이브러리를 호출하는 방법에 대해 설명합니다. 그러나 실행 파일은 "/ usr / bin / zip"이 아니라 "/ usr / bin / ditto"였을 것입니다. 이 포럼의 도움은 훌륭합니다. 시간과 노력에 감사드립니다.
david
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.