__MACOSXフォルダーなしのMac zip圧縮?


158

Mac OSXの組み込みzipコンプレッサーでファイルを圧縮すると、抽出されたzip内に「__MACOSX」というタイトルのフォルダーが作成されます。

このフォルダが作成されないように設定を調整できますか、それともサードパーティの圧縮ツールを購入する必要がありますか?

更新:私は問題を解決するOSX用のフリーウェアアプリを見つけました:「YemuZip

アップデート2:YemuZipはフリーウェアではなくなりました


_MACOSXフォルダーが存在しても問題は発生しません。削除するだけです。
Jayprakash Dubey 2014

1
この質問は、AskDifferent
Nakilonに

11
手付かずのzipアーカイブを必要とするうるさいWebサービスで問題が発生するため、説明に感謝します
mccc

21
イッツ@JayprakashDubey incredibily刺激性、そして私が行くどこでもゴミを残さない好きなLinuxユーザとして、私は我慢できない__MACOSX.DS_Store._fileName、およびすべての他の各種turds Mac OSは、そのアーカイブに落ちます。OSXの `tar 'もこれを行います- 最小の驚きの原則を露骨に無視します。
Wyatt8740

回答:


80

この問題が発生したとき、コマンドラインから実行しました。

zip file.zip uncompressed

編集、多くの反対投票の後:私はしばらく前にこのオプションを使用していましたが、どこでそれを学んだのかわからないので、より良い説明はできません。クリスジョンソンの答えは正しいですが、私は削除しません。1つのコメントが言うように、OPがそれらをファイルなしで圧縮するので、圧縮ファイルからそれらを削除するのではなく、OPが要求するものにより正確です。私も覚えやすいです。


33
これには説明が足りません。
ラプター

2
__MACOSX /サブディレクトリにはMacリソースフォークが含まれ、Macツールを使用してzipファイルを作成すると作成されます。同様に、Macツールはリソースフォークを設定するために__MACOSX /サブディレクトリを使用します。ただし、Macツールを使用してzipファイルを作成し、その他のいくつかのツールを使用して解凍すると、リソースフォークではなく__MACOSX /ディレクトリが取得されます。zipサードパーティのアプリであるを使用してファイルを作成する場合、__ MACOSX /ディレクトリが最初に作成されることはありません。
エドワードフォーク2016年

zipファイルの作成後に_MACOSXフォルダーを削除する簡単な方法については、私の回答を参照してください。
クリスジョンソン

3
__MACOSXおよびその他を使用せずにディレクトリを再帰的に圧縮するには:zip -rX file.zip uncompressed_directory
Konstantin Suvorov

319

事後修正可能 zip -d filename.zip __MACOSX/\*


51
.DS_Storeファイルも削除するには:zip -d filename.zip \*/.DS_Store
BenediktKöppelJun

5
受け入れられた答えは、最初に__MACOSX /ディレクトリを取得しない方法を示していますが、既存の.zipファイルをどうするかについては何も述べていません。この答えは、__ MACOSX /をすでに取得している場合に、それを取り除く方法を示しています。しかし、元々の質問はそもそもどうやってそれを手に入れないのかということでしたので、正解は正解です。
エドワードフォーク

すべてのzipファイルに対してこれを再帰的に行うにはどうすればよいですか?
Wowfunhappy 2017年

ルートの下にあるすべての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(2番目のパラメーターはオプション)
mrdaliri 2017

56

ターミナルで、圧縮するフォルダ内:

zip -r -X Archive.zip *

-Xの意味:「_MACOSX」や「._Filename」などの非表示のMacリソースファイルと.dsストアファイルを除外します

ソース

注:現在のフォルダと後続のフォルダツリーでのみ機能し、*ワイルドカードが必要です。


9
これは、思ったようには-X機能しません。.DS_Storeファイルを除外しません。アプリケーションで機能する理由*は、「。」で始まらないワイルドカード一致ファイルであるzipのみを使用しているためです。ドットファイルを含むディレクトリで試してみてください。そうすれば、含まれていることがわかります。
スピンアップ'25

zipファイルの作成後に_MACOSXフォルダーを削除する簡単な方法については、私の回答を参照してください。
Chris Johnson

1
いいえ。zip -r -X Archive.zip myfolderフォルダを操作しても、.DS_Storeファイルを含むzipファイルが生成されます。
Rockallite 2016年

@Rockallite:正しいです。これは、現在のフォルダー内のフォルダー、ツリー、またはファイルを圧縮した場合にのみ機能します。そのため、引数としてフォルダーを渡すことはできません。それは動作します。
ポンパリニ

これは、フォルダ全体を圧縮するのではなく、ディレクトリ内のファイルに対して機能します。
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フォルダーを除外する方法を尋ねました。最初のコードスニペットは、除外するフォルダーとして名前を付けていないため、明らかに機能しません。
クリスジョンソン

7
zipコマンドラインユーティリティを作成したことがない__MACOSXディレクトリを、その最初のスニペットは、作業を行い、そして-x "__MACOSX"一部は必要ありません。
nisetama 2016年

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. 「Finder」で「ファイルとフォルダ」を選択します
  3. 「シェルスクリプトアクション」を追加する

自動化シェルスクリプト

Finderのコンテキストメニュー項目


Appleのビルトインを使用して圧縮してから不要なファイルを削除するよりも、Automator Shellスクリプトでzipを使用して圧縮する方がよいのではないでしょうか。
マット

@Mattは、オートマトンでアーカイブステップを追加するか、別のシェルコマンドを使用することもできます。
ttimasdf

また、@ Mattは、ファイルが存在する場合、Appleビルトインがファイルの自動命名と名前の増分を処理します。シェルスクリプトを使用すると、この部分は多くの作業になります。
ttimasdf 2017

1
.DS_Storeフォルダーがアーカイブに存在しない場合、エラーがスローされます。`||を追加して改善を提案します 各zipコマンドの後にzip -d "$p" __MACOSX/\* || true
trueを返し

1
他の答えは良いですが、非常にマッシュ派の方法で使用できるので、私はこれが一番好きです。
not2savvy

10

不要なフォルダは、次の方法でも削除できます。

zip -d filename.zip "__MACOSX*"

私に最適


8
zip -r "$destFileName.zip" "$srcFileName" -x "*/\__MACOSX" -x "*/\.*"
  • -x "*/\__MACOSX":あなたが言うように__MACOSXを無視してください。
  • -x "*/\.*":.DS_Storeなどの非表示ファイルを無視します。
  • スペースで名前が付けられている場合、ファイルを避けるために変数を引用します。

また、Automator Serviceを構築して、Finderで簡単に使用できるようにすることもできます。必要に応じて、以下のリンクで詳細を確認してください。

Github


ゴミの海の中で唯一正しい答えは、投票数が最も少ないものです。/ため息
ヒース・ラフター

それは私にとってはうまくいったが、destFileName.zipとsrcFileNameの前に引用符とドル記号を削除する必要があった
Alexander 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アーカイブのファイルそれがされていない場合ので、通常は、単一のディレクトリである必要があり、いくつかのアンアーカイビングUtilitesを(のようにunzipして7zではなく、アーカイブユーティリティ、Unarchiver、unarまたはdtrx)は、アーカイブが抽出されるとファイルが見つかり、ファイルを見つけるのが難しくなります。そのような複数のアーカイブが同時に抽出されると、どのファイルがどのアーカイブに属しているかを区別するのが難しくなります。

アーカイブユーティリティ__MACOSXは、少なくとも1つのファイルに拡張属性、ファイルフラグ、リソースフォークなどのメタデータが含まれているアーカイブを作成する場合にのみ、ディレクトリを作成します。__MACOSXディレクトリは、そのファイル名で開始のAppleDoubleファイルが含まれている._OS X固有のメタデータを格納するために使用されていることを。のzipコマンドラインユーティリティの廃棄は、エイリアスファイル内の情報がリソースフォークに格納されているので、このようなタグなどのメタデータは、失われ、そのエイリアスが動作を停止していることも意味拡張属性、ファイルフラグ、およびリソースフォーク、などのメタデータ。

通常、OS X固有のメタデータを破棄できますが、メタデータファイルに含まれるものを確認するには、を使用できますxattr -lxattrリソースフォークとファイルフラグも含まれます。これらは実際には拡張属性として保存されていなくても、拡張属性インターフェイスを介してアクセスできるためです。Archive Utilityとzipコマンドラインユーティリティの両方がACLを破棄します。


これはディレクトリでのみ機能し、ディレクトリ内の一連のファイルでは機能しません。
Michael Trouw

@MichaelTrouwはい。ただし、通常は最初に最上位に複数のファイルを含むアーカイブを作成しないでください。
nisetama

これで問題ないユースケースがあるので、同意しないことに同意します。たとえば、zipfileのエンドユーザーがユーザーになることはありません。しかし、サーバー。
Michael Trouw

3

できません。

しかし、あなたができることは、圧縮後にそれらの不要なフォルダを削除することです。コマンドラインzipは異なる引数を取ります。1つ-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、コマンドラインツールやFinderのcompressコマンドを?

についてzipは、--data-forkオプションを試すことができます。--no-extraそれでもうまくいかない場合は、を試してみてください。ただし、uid / gidやファイル時間など、価値のある他のファイルメタデータは無視されているようです。

FinderのCompressコマンドについては、その動作を制御するオプションがないと思います。単純なケースです。

もう1つのツール、およびFinderが実際に内部で使用するツールはdittoです。とともに-c -kオプション、それはzipアーカイブを作成します。このツールを使用すると、あなたが試すことができ--norsrc--noextattr--noqtn--noaclおよび/または単にオフのままに--sequesterRsrc(manページによると、ために責任があるかもしれない、オプション__MACOSXのサブディレクトリを)。ただし、おそらく存在しない--sequesterRsrcということは、AppleDouble形式を使用することを単に意味します。これは、1つの__MACOSXディレクトリの代わりに至る所に._ファイルを作成します。


1
はい、私はファインダーの「圧縮」ユーティリティについて言及しています。現状のまま、WordPressの外観/エディターを台無しにする._ファイルでいっぱいのフォルダーを取得しています
Scott B

1

既存の回答をすべて読んだ後、私にはより良い解決策があります。ワークフローを1回右クリックするだけですべてを実行できます。 NO追加のソフトウェア、NOは、コマンドラインに詰め込むと複雑NOを殻のトリックを。

自動化ワークフロー:

  • 入力:任意のアプリケーションのファイルまたはフォルダー。
  • ステップ1:デフォルトパラメータでシステムに組み込まれたアーカイブを作成します。
  • ステップ2:入力をパラメーターとして使用して、Shellコマンドを実行します。以下のコマンドをコピーします。

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

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

保存して完了です!フォルダまたはファイルの大部分を右クリックして、サービスメニューからワークフローを選択します。メタデータのないアーカイブが一緒に作成されます。

サンプル


0

これは__MACOSXtarコマンドでファイルを圧縮するときにディレクトリを回避する方法です:

$ 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.