web-dev-qa-db-ja.com

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

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

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

UPDATE:私はちょうど私の問題を解決するOSX用のフリーウェアアプリを見つけました: " YemuZip "

UPDATE 2:YemuZipはもはやフリーウェアではありません

145
Scott B

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

Zip file.Zip uncompressed

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

69
sinuhepop

Zip -d filename.Zip __MACOSX/\*により事後修正可能

295
Chris Johnson

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

Zip -r -X Archive.Zip *

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

ソース

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

47
pompalini

このコマンドは私のためにそれをしました:

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

Target.Zipは、作成するZipファイルです。 Sourceは、Zipアップするソースファイル/フォルダーです。また、_xパラメーターは、含まれないファイル/フォルダーを指定します。何らかの理由で上記が機能しない場合は、代わりにこれを試してください:

Zip -r Target.Zip Source -x "*.DS_Store" -x "__MACOSX"
23
Adil Hussain

この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. 「シェルスクリプトアクション」を追加する

automator Shell script

contextual menu item in Finder

14
benedikt

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

Zip -d filename.Zip "__MACOSX*"

私に最適

7
SabU
Zip -r "$destFileName.Zip" "$srcFileName" -x "*/\__MACOSX" -x "*/\.*"
  • -x "*/\__MACOSX":言及したように__MACOSXを無視します。
  • -x "*/\.*":.DS_Storeなどの隠しファイルを無視します。
  • SPACEで名前が付けられている場合、ファイルを避けるために変数を引用してください。

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

Github

3
Jian Jason

Zipコマンドラインユーティリティは__MACOSXディレクトリを作成しないため、次のようなコマンドを実行できます。

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

以下の出力では、Zipコマンドラインユーティリティで作成したa.Zipには__MACOSXディレクトリが含まれていませんが、Finderで作成したa 2.Zipには含まれています。

$ 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などですが、Archive Utility、The Unarchiver、unardtrxなど)アーカイブを抽出するときにファイルのディレクトリを含むため、多くの場合、ファイルを見つけるのが難しくなります。また、そのような複数のアーカイブを同時に抽出すると、どのファイルがどのアーカイブに属するかを判別するのが難しくなります。

アーカイブユーティリティは、少なくとも1つのファイルに拡張属性、ファイルフラグ、リソースフォークなどのメタデータが含まれるアーカイブを作成する場合にのみ__MACOSXディレクトリを作成します。 __MACOSXディレクトリには、OS X固有のメタデータを保存するために使用される._で始まるファイル名のAppleDoubleファイルが含まれています。 Zipコマンドラインユーティリティは、拡張属性、ファイルフラグ、リソースフォークなどのメタデータを破棄します。これは、タグなどのメタデータが失われ、エイリアスファイルの情報がリソースフォークに保存されるため、エイリアスが機能しなくなることも意味します。

通常、OS X固有のメタデータのみを破棄できますが、メタデータファイルに含まれる内容を確認するには、xattr -lを使用できます。 xattrには、リソースフォークとファイルフラグも含まれています。これらは、実際には拡張属性として格納されていない場合でも、拡張属性インターフェイスからアクセスできるためです。アーカイブユーティリティとZipコマンドラインユーティリティの両方がACLを破棄します。

3
nisetama

できません。

ただし、圧縮後に不要なフォルダを削除することができます。コマンドラインZipは、引数-dが正規表現に基づいてコンテンツを削除するための異なる引数を取ります。したがって、次のように使用できます。

Zip -d filename.Zip __MACOSX/\*

隠しファイルを圧縮しないでください:

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

この質問では、次のようになります。

Zip newzipname filename.any  -x "\__MACOSX"

ただし、Zipコマンドはファイルを圧縮するだけでターミナルで実行され、他のファイルは圧縮されません。そのため、結果は同じです:

Zip newzipname filename.any
2
Xian Shu

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
Ken Thomases

存在するすべての答えを読んだ後、私はより良い解決策を持っています。ワークフローを1回右クリックするだけですべてを実行できます。 NO追加ソフトウェア、NO複雑なコマンドラインスタッフNOシェルトリック。

オートマトラのワークフロー:

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

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

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

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

Sample

1
ttimasdf

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

$ 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

0
Zhang Huangbin