__MACOSX 폴더없이 Mac zip 압축?


158

Mac OSX에서 내장 된 zip 압축기로 파일을 압축하면 압축이 풀린 zip에 "__MACOSX"라는 추가 폴더가 생성됩니다.

이 폴더가 생성되지 않도록 설정을 조정할 수 있습니까? 아니면 타사 압축 도구를 구입해야합니까?

업데이트 : 방금 내 문제를 해결하는 OSX 용 프리웨어 응용 프로그램을 찾았습니다. " YemuZip "

업데이트 2 : YemuZip은 더 이상 프리웨어가 아닙니다.


_MACOSX 폴더가 존재해도 아무런 문제가 없습니다. 간단히 삭제하십시오.
Jayprakash Dubey

1
이 질문은 AskDifferent에 있어야하기 때문에 주제 꺼져있는 것처럼 보이
Nakilon

11
깨끗한 zip 아카이브가 필요한 까다로운 웹 서비스에 문제가 발생하므로 설명에 감사드립니다
mccc

21
그건 @JayprakashDubey incredibily 자극, 그리고 내가가는 모든 곳에서 쓰레기를 떠나지 않을 좋아하는 리눅스 사용자로, 나는 참을 수가 없어 __MACOSX, .DS_Store, ._fileName, 다른 모든 분류 된 똥 맥 OS는 아카이브에서 상품. OSX의`tar '은 최소한 놀랍게도원칙을 무시하고 무시 무시한 일입니다 .
Wyatt8740

답변:


80

이 문제가 발생했을 때 명령 줄에서 수행했습니다.

zip file.zip uncompressed

많은 downvotes 후 EDIT : 나는 얼마 전에이 옵션을 사용하고 있었고 어디서 배웠는지 알지 못하므로 더 나은 설명을 줄 수 없습니다. 크리스 존슨의 대답 은 정확하지만 삭제하지는 않습니다. 한 의견에서 알 수 있듯이 압축 파일에서 파일을 제거하는 대신 파일없이 압축하므로 OP가 요구하는 내용이 더 정확합니다. 나도 기억하기 쉽다는 것을 알았습니다.


33
이것은 설명이 부족합니다.
랩터

2
__MACOSX / 하위 디렉토리에는 Mac 리소스 포크가 포함되어 있으며 Mac 도구를 사용하여 zip 파일을 만들 때 생성됩니다. 마찬가지로, Mac 도구는 리소스 포크를 설정하기 위해 __MACOSX / 하위 디렉토리를 사용하므로 볼 수 없습니다. 그러나 Mac 도구를 사용하여 zip 파일을 만들고 다른 도구를 사용하여 압축을 풀면 리소스 포크가 아닌 __MACOSX / 디렉토리를 얻게됩니다. zip타사 앱인 을 사용하여 파일을 생성하면 __MACOSX / 디렉토리가 처음에 생성되지 않습니다.
에드워드 포크

zip 파일을 만든 후 _MACOSX 폴더를 쉽게 삭제하는 방법은 내 답변을 참조하십시오.
Chris Johnson

3
__MACOSX 및 기타없이 디렉토리를 재귀 적으로 압축하려면 다음을 수행하십시오. zip -rX file.zip uncompressed_directory
콘스탄틴 수보 로프

319

에 의해 사실 후에 고칠 수 있습니다 zip -d filename.zip __MACOSX/\*


51
.DS_Store 파일을 삭제하려면 :zip -d filename.zip \*/.DS_Store
Benedikt Köppel

5
허용되는 답변은 __MACOSX / 디렉토리를 처음에 얻는 방법은 없지만 기존 .zip 파일로 수행 할 작업에 대해서는 아무 것도 말하지 않습니다. 이 답변은 __MACOSX /를 제거하는 방법을 알려줍니다. 그러나 원래의 질문은 처음에는 그것을 얻지 않는 방법이므로 받아 들여진 대답은 정답입니다.
Edward Falk

모든 zip 파일에 대해 어떻게 재귀 적으로 수행 할 수 있습니까?
Wowfunhappy

루트 아래의 모든 zip 파일에 적용하려면 : find ~ -type f -name '*.zip' -exec zip -d '{}' __MACOSX/\* \;. 시작 지점을 대신 사용하십시오 ~.
크리스 존슨

모든 정크 파일을 제거하는 기능 : cleanzip(){ zip -d $1 $2 __MACOSX/\* \*/.DS_Store; }. 사용법 : cleanzip file.zip또는 cleanzip file.zip MORE_JUNK_FILES(두 번째 매개 변수는 선택 사항 임)
mrdaliri

56

터미널에서 압축하려는 폴더 내부 :

zip -r -X Archive.zip *

-X의 의미 : "_MACOSX"또는 "._Filename"과 같은 보이지 않는 Mac 리소스 파일과 .ds 저장 파일을 제외합니다.

출처

참고 : 폴더 및 후속 폴더 트리에서만 작동하며 *와일드 카드 가 있어야합니다 .


9
생각한대로 작동 -X하지 않습니다. .DS_Store 파일을 제외하지 않습니다. 응용 프로그램에서 작동하는 이유 *는 "."으로 시작하지 않는 와일드 카드 일치 파일 인 압축 만하기 때문 입니다. 도트 파일이 포함 된 디렉토리에서 시도하면 포함 된 것을 볼 수 있습니다.
spinup

zip 파일을 만든 후 _MACOSX 폴더를 쉽게 삭제하는 방법은 내 답변을 참조하십시오.
Chris Johnson

1
아니요 zip -r -X Archive.zip myfolder. 폴더에서 작업 하면 여전히 .DS_Store 파일이 포함 된 zip 파일이 생성됩니다.
Rockallite

@ Rockallite : 올바른 폴더, 폴더 또는 파일을 압축 할 때만 작동합니다. 따라서 폴더를 인수로 전달할 수 없거나 예상대로 작동하지 않습니다. 작동합니다.
pompalini

이것은 완전한 폴더를 압축하는 대신 디렉토리 내의 파일에 적용됩니다.
Michael Trouw

26

이 명령은 나를 위해 그것을했다 :

zip -r Target.zip Source -x "*.DS_Store"

Target.zip작성할 zip 파일입니다. Source압축 할 소스 파일 / 폴더입니다. 그리고 _x매개 변수는 포함하지 않을 파일 / 폴더를 지정합니다. 어떤 이유로 든 위의 방법으로 작동하지 않으면 대신 시도하십시오.

zip -r Target.zip Source -x "*.DS_Store" -x "__MACOSX"

OP는 __MACOSX 폴더를 제외하는 방법을 묻습니다. 첫 번째 코드 스 니펫은 제외 할 폴더로 이름을 지정하지 않기 때문에 분명히 작동하지 않습니다.
Chris Johnson

7
zip명령 행 유틸리티는 생성하지 __MACOSX디렉토리를, 그래서 첫 번째 조각은 작업을 수행하고, -x "__MACOSX"일부는 필요하지 않습니다.
nisetama

15

이 Automator Shell Script를 사용하여 문제를 해결하고 있습니다. 상황에 맞는 메뉴 항목으로 표시됩니다 (Finder에 표시되는 파일을 마우스 오른쪽 버튼으로 클릭).

while read -r p; do
  zip -d "$p" __MACOSX/\* || true
  zip -d "$p" \*/.DS_Store || true
done
  1. Automator를 사용하여 새 서비스 생성
  2. "파인더"에서 "파일 및 폴더"를 선택하십시오.
  3. "쉘 스크립트 동작"추가

자동화 셸 스크립트

Finder의 상황에 맞는 메뉴 항목


Apple 내장 기능을 사용하여 압축하는 대신 Automator Shell Script에서 zip을 사용하여 압축하는 것이 더 좋지 않습니까?
Matt

@Matt automator에서 아카이브 단계를 추가하거나 다른 쉘 명령을 사용할 수도 있습니다.
ttimasdf

@Matt, Apple 내장은 파일이 존재할 때 자동 파일 이름 지정 및 이름 증가를 처리합니다. 쉘 스크립트를 사용하면이 부분이 많은 작업이 될 것입니다.
ttimasdf

1
아카이브에 .DS_Store 폴더가 없으면 오류가 발생합니다. `||를 추가하여 개선을 제안합니다 각 압축 명령 후 (예 : TRUE ' zip -d "$p" __MACOSX/\* || true당신의 대답에.
adamsfamily

1
다른 답변은 좋지만 Macish 방식으로 사용할 수 있기 때문에이 방법이 가장 좋습니다.
not2savvy

10

원하지 않는 폴더는 다음과 같은 방법으로도 삭제할 수 있습니다.

zip -d filename.zip "__MACOSX*"

나를 위해 가장 잘 작동


8
zip -r "$destFileName.zip" "$srcFileName" -x "*/\__MACOSX" -x "*/\.*"
  • -x "*/\__MACOSX": 언급 한대로 __MACOSX를 무시하십시오.
  • -x "*/\.*": .DS_Store와 같은 숨겨진 파일은 무시하십시오.
  • SPACE로 이름이 지정된 파일을 피하려면 변수를 인용하십시오.

또한 Automator Service를 구축하여 Finder에서 쉽게 사용할 수 있습니다. 필요한 경우 자세한 내용을 보려면 아래 링크를 확인하십시오.

깃 허브


쓰레기의 바다에서 유일한 정답 인 Heh는 또한 투표가 가장 적은 답변이기도합니다. / sigh
히스 러프 티

그것은 나를 위해 일하지만 난 주위에 따옴표를 제거해야하고 destFileName.zip 및 srcFileName 앞에 달러 기호
알렉산더 Poleschuk

3

zip명령 행 유틸리티는 생성 결코 __MACOSX그냥이 같은 명령을 실행할 수 있도록, 디렉토리 :

zip directory.zip -x \*.DS_Store -r directory

아래 출력 a.zip에서 zip명령 줄 유틸리티로 만든 __MACOSX디렉토리 에는 디렉토리가 없지만 a 2.zipFinder에서 만든 디렉토리 는 포함되어 있습니다 .

$ touch a
$ xattr -w somekey somevalue a
$ zip a.zip a
  adding: a (stored 0%)
$ unzip -l a.zip
Archive:  a.zip
  Length     Date   Time    Name
 --------    ----   ----    ----
        0  01-02-16 20:29   a
 --------                   -------
        0                   1 file
$ unzip -l a\ 2.zip # I created `a 2.zip` from Finder before this
Archive:  a 2.zip
  Length     Date   Time    Name
 --------    ----   ----    ----
        0  01-02-16 20:29   a
        0  01-02-16 20:31   __MACOSX/
      149  01-02-16 20:29   __MACOSX/._a
 --------                   -------
      149                   3 files

-x .DS_Store.DS_Store디렉토리 내의 파일 은 제외하지 않지만 제외 합니다 -x \*.DS_Store.

여러 파일이있는 zip 아카이브의 최상위 레벨 파일은 일반적으로 단일 디렉토리 여야합니다. 그렇지 않은 경우 일부 아카이브 아카이브 유틸리티 ( unzip7z아카이브 유틸리티, 아카이브 해제 unar, 또는dtrx )을위한 포함하는 디렉토리를 생성하지 않는다 아카이브가 추출 될 때 파일이 생성되어 파일을 찾기가 어려워지며, 여러 개의 아카이브가 동시에 추출되는 경우 어떤 파일이 어떤 아카이브에 속하는지 알기가 어려울 수 있습니다.

아카이브 유틸리티 __MACOSX는 하나 이상의 파일에 확장 된 속성, 파일 플래그 또는 리소스 포크와 같은 메타 데이터가 포함 된 아카이브를 만들 때만 디렉토리를 만듭니다. __MACOSX디렉토리는 그 파일 이름 시작으로 Appledouble을 파일을 포함 ._하는 OS X 고유의 메타 데이터를 저장하는 데 사용됩니다. zip명령 행 유틸리티를 파기는 메타 데이터 등의 별칭 파일의 정보가 리소스 포크에 저장되기 때문에, 메타 데이터 등의 태그 분실, 그 별명이 작동을 멈출 것을 또한 의미 확장 속성, 파일 플래그 및 리소스 포크, 등.

일반적으로 OS X 관련 메타 데이터를 버릴 수 있지만 메타 데이터 파일에 포함 된 내용을 보려면을 사용할 수 있습니다 xattr -l. xattr또한 자원 포크 및 파일 플래그도 포함됩니다. 실제로 확장 속성으로 저장되지 않았더라도 확장 속성 인터페이스를 통해 액세스 할 수 있기 때문입니다. 아카이브 유틸리티와 zip명령 행 유틸리티 는 모두 ACL을 삭제합니다.


이것은 디렉토리 내부의 많은 파일이 아닌 디렉토리에서만 작동합니다.
Michael Trouw

@MichaelTrouw 예, 그러나 처음에는 최상위 레벨에 여러 파일이 포함 된 아카이브를 작성하지 않아야합니다.
nisetama

이것이 좋은 사용 사례가 있기 때문에 동의하지 않습니다. 예를 들어, zip 파일의 최종 사용자는 절대 사용자가 아닙니다. 그러나 서버.
Michael Trouw

3

당신은 할 수 없습니다.

그러나 당신이 할 수있는 일은 압축 후 원치 않는 폴더를 삭제하는 것입니다. 명령 행 zip-d정규 표현식을 기반으로 컨텐츠를 삭제하기위한 다른 인수 를 사용합니다. 따라서 다음과 같이 사용할 수 있습니다.

zip -d filename.zip __MACOSX/\*

2

숨겨진 파일을 압축하지 마십시오 :

zip newzipname filename.any  -x "\.*"

이 질문으로 다음과 같아야합니다.

zip newzipname filename.any  -x "\__MACOSX"

zip 명령은 파일을 압축하는 터미널에서만 실행되지만 다른 압축은 수행하지 않습니다. 결과가 동일합니다.

zip newzipname filename.any

__MACOSX로 시작되지 않음.
PJMeisch

그래, 실수 했어 수정되었습니다. 상기시켜 주셔서 감사합니다
Xian Shu

1

당신은 의미합니까 zip명령 줄 도구 또는 파인더의 압축 명령을?

의 경우 옵션을 zip사용해 볼 수 --data-fork있습니다. 그렇지 않으면 --no-extrauid / gid 및 파일 시간과 같이 가치가있을 수있는 다른 파일 메타 데이터를 무시하는 것처럼 보이지만 시도 할 수 있습니다.

Finder 's Compress 명령의 경우 동작을 제어하는 ​​옵션이 없다고 생각합니다. 간단한 경우입니다.

다른 도구 및 Finder가 실제로 후드에서 사용하는 도구는 ditto입니다. 으로 -c -k옵션, 그것은 우편 아카이브를 만듭니다. 이 도구를 사용하면 실험 할 수 --norsrc, --noextattr, --noqtn, --noacl및 / 또는 단순히 생략 할 --sequesterRsrc(man 페이지에 따르면, 대한 책임이있을 수 옵션 __MACOSX하위 디렉토리). 그러나 아마도 부재는 --sequesterRsrc단순히 AppleDouble 형식을 사용하는 것을 의미합니다. AppleDouble은 하나의 __MACOSX디렉토리 대신 ._ 파일을 생성합니다 .


1
예, 파인더의 "압축"유틸리티를 참조하고 있습니다. 그대로, 나는 ._ 파일로 가득 찬 폴더를 얻습니다. WordPress의 모양 / 편집자를 방해합니다.
Scott B

1

기존의 모든 답변을 읽은 후에 더 나은 솔루션을 제공합니다. 한 번의 클릭으로 워크 플로를 통해 모든 작업을 수행 할 수 있습니다. NO 추가 소프트웨어는 어떠한 명령 줄 거즈와 복잡하지 NO의 쉘 트릭을.

자동화 작업 과정 :

  • 입력 : 모든 응용 프로그램의 파일 또는 폴더
  • 1 단계 : 기본 매개 변수가 내장 된 시스템 인 아카이브를 작성하십시오.
  • 2 단계 : 입력을 매개 변수로 사용하여 셸 명령 실행 아래 명령을 복사하십시오.

    zip -d "$@" "__MACOSX/*" || true

    zip -d "$@" "*/.DS_Store" || true

저장하면 완료됩니다! 폴더 또는 대량의 파일을 마우스 오른쪽 버튼으로 클릭하고 서비스 메뉴에서 워크 플로를 선택하십시오. 메타 데이터가없는 아카이브가 함께 생성됩니다.

견본


0

이것은 명령으로 __MACOSX파일을 압축 할 때 디렉토리를 피하는 방법입니다 tar.

$ cd dir-you-want-to-archive $ find . | xargs xattr -l # <- list all files with special xattr attributes ... ./conf/clamav: com.apple.quarantine: 0083;5a9018b1;Safari;9DCAFF33-C7F5-4848-9A87-5E061E5E2D55 ./conf/global: com.apple.quarantine: 0083;5a9018b1;Safari;9DCAFF33-C7F5-4848-9A87-5E061E5E2D55 ./conf/web_server: com.apple.quarantine: 0083;5a9018b1;Safari;9DCAFF33-C7F5-4848-9A87-5E061E5E2D55

먼저 속성을 삭제하십시오.

find . | xargs xattr -d com.apple.quarantine

find . | xargs xattr -l다시 실행 하고 xattr 속성이있는 파일이 없는지 확인하십시오. 그럼 당신은 갈 수 있습니다 :

tar cjvf file.tar.bz2 dir

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