203

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

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

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

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

4

15 に答える 15

349

事後に修正することができますzip -d filename.zip __MACOSX/\*

于 2012-12-02T01:28:35.393 に答える
109

私がこの問題を抱えていたとき、私はコマンドラインからそれをしました:

zip file.zip uncompressed

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

于 2012-07-10T12:47:13.100 に答える
82

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

zip -r -X Archive.zip *

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

ソース

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

于 2014-04-29T18:12:53.947 に答える
37

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

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

Target.zip作成するzipファイルです。Sourcezip形式のソースファイル/フォルダです。また、-xパラメーターは除外するファイル/フォルダーを指定します。上記が何らかの理由で機能しない場合は、代わりにこれを試してください。

zip -r Target.zip Source -x "*.DS_Store" -x "__MACOSX"
于 2014-03-21T14:24:51.680 に答える
18

私はこのAutomatorシェルスクリプトを使用して後で修正しています。コンテキストメニュー項目として表示されます(Finderに表示されているファイルを右クリックします)。

while read -r p; do
  zip -d "$p" __MACOSX/\* || true
  zip -d "$p" \*/.DS_Store || true
done
  1. Automatorで新しいサービスを作成する
  2. 「Finder」で「ファイルとフォルダ」を選択します
  3. 「シェルスクリプトアクション」を追加する

オートマトンシェルスクリプト

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

于 2016-05-25T07:05:34.470 に答える
12
zip -r "$destFileName.zip" "$srcFileName" -x "*/\__MACOSX" -x "*/\.*"
  • -x "*/\__MACOSX":あなたが言うように__MACOSXを無視してください。
  • -x "*/\.*":.DS_Storeなどの隠しファイルは無視してください。
  • SPACEで名前が付けられている場合は、ファイルを避けるために変数を引用してください。

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

Github

于 2018-06-11T08:10:54.780 に答える
11

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

zip -d filename.zip "__MACOSX*"

私に最適です

于 2016-05-09T15:51:06.383 に答える
5

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

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

以下の出力では、コマンドラインユーティリティa.zipで作成したディレクトリzipは含まれていませんが、Finderから作成したものには含まれています。__MACOSXa 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、アーカイブユーティリティ、Unarchiver、、unarなどdtrx)は、アーカイブが抽出されるときにファイルが見つかるため、ファイルを見つけるのが難しくなります。また、そのような複数のアーカイブが同時に抽出されると、どのファイルがどのアーカイブに属しているかを判断するのが難しくなる可能性があります。

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

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

于 2016-01-02T18:50:15.187 に答える
4

できません。

しかし、あなたができることは、zipした後にそれらの不要なフォルダを削除することです。コマンドラインzipはさまざまな引数を取ります。1つは-d、正規表現に基づいてコンテンツを削除するためのものです。したがって、次のように使用できます。

zip -d filename.zip __MACOSX/\*
于 2016-04-26T04:52:17.803 に答える
3

サブフォルダを含む、.DS_Storeおよびからの.zipをクリーンアップします。__MACOSX

zip -d archive.zip '__MACOSX/*' '*/__MACOSX/*' .DS_Store '*/.DS_Store'

ウォークスルー:

  1. ファイル(またはフォルダ)を右クリックして[圧縮...]を選択し、通常どおり.zipを作成します。
  2. ターミナルアプリを開きます(Spotlight検索でターミナルを検索します)
  3. ターミナルzip に入力します(ただし、Enterキーは押さないでください)
  4. .zipをターミナルにドラッグして、パスに変換します
  5. コピーペースト-d '__MACOSX/*' '*/__MACOSX/*' .DS_Store '*/.DS_Store'
  6. Enterキーを押します
  7. 内部のファイルを一覧表示し、チェックするために使用zipinfo archive.zipします(オプション)
于 2021-04-08T10:07:45.633 に答える
2

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

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

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

zip newzipname filename.any  -x "\__MACOSX"

ただし、zipコマンドはファイルを圧縮するだけでターミナルで実行され、他のファイルは圧縮されません。したがって、これを行うと結果は同じになります。

zip newzipname filename.any
于 2017-05-09T01:39:10.793 に答える
2

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

オートマターワークフロー:

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

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

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

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

サンプル

于 2017-12-19T05:11:54.890 に答える
1

zipコマンドラインツールまたはFinderの圧縮コマンドを意味しますか?

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

FinderのCompressコマンドの場合、その動作を制御するオプションはないと思います。単純な場合です。

他のツール、そしておそらくFinderが実際に内部で使用しているツールはですditto。オプションを使用すると、-c -kzipアーカイブが作成されます。このツールを使用すると、、、、を試してみることができます。--norsrcまた、--noextattrオプションを省略したりすることもできます(manページによると、サブディレクトリを担当している可能性があります)。ただし、おそらく存在しないということは、AppleDouble形式を使用することを意味します。これにより、1つのディレクトリではなく、あらゆる場所に._ファイルが作成されます。--noqtn--noacl--sequesterRsrc__MACOSX--sequesterRsrc__MACOSX

于 2012-06-07T01:09:50.250 に答える
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

于 2018-02-23T14:42:06.870 に答える
0

Automatorツールで使用できる別のシェルスクリプト(スクリプトの作成方法に関するbenediktの回答も参照)は次のとおりです。

while read -r f; do
    d="$(dirname "$f")"
    n="$(basename "$f")"
    cd "$d"
    zip "$n.zip" -x \*.DS_Store -r "$n"
done

ここでの違いは、このコードがmacOS固有のファイルなしで選択されたフォルダーを直接圧縮することです(最初に圧縮してから削除することはありません)。

于 2020-10-13T22:59:08.113 に答える