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.