Mac OSXで組み込みのZipコンプレッサーでファイルを圧縮すると、抽出されたZipに「__MACOSX」というタイトルの追加フォルダーが作成されます。
このフォルダが作成されないように設定を調整できますか、またはサードパーティの圧縮ツールを購入する必要がありますか?
UPDATE:私はちょうど私の問題を解決するOSX用のフリーウェアアプリを見つけました: " YemuZip "
UPDATE 2:YemuZipはもはやフリーウェアではありません
この問題が発生したとき、コマンドラインから実行しました。
Zip file.Zip uncompressed
編集、多くのダウン投票の後:私はしばらく前にこのオプションを使用していましたが、どこで学んだかわかりませんので、 tより良い説明をします。クリス・ジョンソンの answer は正しいですが、私は削除しません。あるコメントが言うように、OPは圧縮ファイルからファイルを削除するのではなく、それらのファイルなしで圧縮するため、OPが求めているものにより正確です。私も覚えやすいと思います。
Zip -d filename.Zip __MACOSX/\*
により事後修正可能
ターミナルで圧縮するフォルダー内:
Zip -r -X Archive.Zip *
-Xの意味:「_MACOSX」や「._Filename」などの非表示のMacリソースファイルと.dsストアファイルを除外します
注:フォルダーおよび後続のフォルダーツリーでのみ機能し、*
ワイルドカードが必要です。
このコマンドは私のためにそれをしました:
Zip -r Target.Zip Source -x "*.DS_Store"
Target.Zip
は、作成するZipファイルです。 Source
は、Zipアップするソースファイル/フォルダーです。また、_x
パラメーターは、含まれないファイル/フォルダーを指定します。何らかの理由で上記が機能しない場合は、代わりにこれを試してください:
Zip -r Target.Zip Source -x "*.DS_Store" -x "__MACOSX"
不要なフォルダは、次の方法でも削除できます。
Zip -d filename.Zip "__MACOSX*"
私に最適
Zip -r "$destFileName.Zip" "$srcFileName" -x "*/\__MACOSX" -x "*/\.*"
-x "*/\__MACOSX"
:言及したように__MACOSXを無視します。-x "*/\.*"
:.DS_Storeなどの隠しファイルを無視します。また、Automator Serviceを構築して、Finderで簡単に使用できるようにすることもできます。必要に応じて以下のリンクをチェックして詳細を確認してください。
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アーカイブの最上位ファイルは、通常、単一のディレクトリである必要があります。そうでない場合、一部のアーカイブ解除ユーティリティ(unzip
や7z
などですが、Archive Utility、The Unarchiver、unar
、dtrx
など)アーカイブを抽出するときにファイルのディレクトリを含むため、多くの場合、ファイルを見つけるのが難しくなります。また、そのような複数のアーカイブを同時に抽出すると、どのファイルがどのアーカイブに属するかを判別するのが難しくなります。
アーカイブユーティリティは、少なくとも1つのファイルに拡張属性、ファイルフラグ、リソースフォークなどのメタデータが含まれるアーカイブを作成する場合にのみ__MACOSX
ディレクトリを作成します。 __MACOSX
ディレクトリには、OS X固有のメタデータを保存するために使用される._
で始まるファイル名のAppleDoubleファイルが含まれています。 Zip
コマンドラインユーティリティは、拡張属性、ファイルフラグ、リソースフォークなどのメタデータを破棄します。これは、タグなどのメタデータが失われ、エイリアスファイルの情報がリソースフォークに保存されるため、エイリアスが機能しなくなることも意味します。
通常、OS X固有のメタデータのみを破棄できますが、メタデータファイルに含まれる内容を確認するには、xattr -l
を使用できます。 xattr
には、リソースフォークとファイルフラグも含まれています。これらは、実際には拡張属性として格納されていない場合でも、拡張属性インターフェイスからアクセスできるためです。アーカイブユーティリティとZip
コマンドラインユーティリティの両方がACLを破棄します。
できません。
ただし、圧縮後に不要なフォルダを削除することができます。コマンドラインZip
は、引数-d
が正規表現に基づいてコンテンツを削除するための異なる引数を取ります。したがって、次のように使用できます。
Zip -d filename.Zip __MACOSX/\*
隠しファイルを圧縮しないでください:
Zip newzipname filename.any -x "\.*"
この質問では、次のようになります。
Zip newzipname filename.any -x "\__MACOSX"
ただし、Zipコマンドはファイルを圧縮するだけでターミナルで実行され、他のファイルは圧縮されません。そのため、結果は同じです:
Zip newzipname filename.any
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回右クリックするだけですべてを実行できます。 NO追加ソフトウェア、NO複雑なコマンドラインスタッフNOシェルトリック。
オートマトラのワークフロー:
ステップ2:入力をパラメーターとしてシェルコマンドを実行します。以下のコマンドをコピーします。
Zip -d "$@" "__MACOSX/*" || true
Zip -d "$@" "*/.DS_Store" || true
保存して完了です!フォルダーまたはファイルの大部分を右クリックし、サービスメニューからワークフローを選択するだけです。メタデータのないアーカイブが一緒に作成されます。
これは、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