Mac OSXに組み込まれているzipコンプレッサーを使用してファイルを圧縮すると、抽出されたzipに「__MACOSX」という名前の追加のフォルダーが作成されます。
このフォルダが作成されないように設定を調整できますか、それともサードパーティの圧縮ツールを購入する必要がありますか?
更新:問題を解決するOSX用のフリーウェアアプリを見つけました:「YemuZip」
更新2:YemuZipはもはやフリーウェアではありません。
事後に修正することができますzip -d filename.zip __MACOSX/\*
私がこの問題を抱えていたとき、私はコマンドラインからそれをしました:
zip file.zip uncompressed
編集、多くの反対票を投じた後:私はしばらく前にこのオプションを使用していましたが、どこでそれを学んだのかわからないので、より良い説明をすることはできません。クリスジョンソンの答えは正しいですが、私は私のものを削除しません。あるコメントが言うように、圧縮ファイルからそれらを削除するのではなく、それらのファイルなしで圧縮するので、OPが求めているものに対してより正確です。覚えやすいと思います。
圧縮するフォルダ内のターミナル:
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 -r "$destFileName.zip" "$srcFileName" -x "*/\__MACOSX" -x "*/\.*"
-x "*/\__MACOSX"
:あなたが言うように__MACOSXを無視してください。-x "*/\.*"
:.DS_Storeなどの隠しファイルは無視してください。また、Automator Serviceを構築して、Finderで簡単に使用できるようにすることもできます。必要に応じて、以下のリンクを確認して詳細を確認してください。
不要なフォルダは、次の方法で削除することもできます。
zip -d filename.zip "__MACOSX*"
私に最適です
zip
コマンドラインユーティリティはディレクトリを作成しないため__MACOSX
、次のようなコマンドを実行できます。
zip directory.zip -x \*.DS_Store -r directory
以下の出力では、コマンドラインユーティリティa.zip
で作成したディレクトリzip
は含まれていませんが、Finderから作成したものには含まれています。__MACOSX
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
、アーカイブユーティリティ、Unarchiver、、unar
などdtrx
)は、アーカイブが抽出されるときにファイルが見つかるため、ファイルを見つけるのが難しくなります。また、そのような複数のアーカイブが同時に抽出されると、どのファイルがどのアーカイブに属しているかを判断するのが難しくなる可能性があります。
アーカイブユーティリティは__MACOSX
、少なくとも1つのファイルに拡張属性、ファイルフラグ、リソースフォークなどのメタデータが含まれているアーカイブを作成する場合にのみ、ディレクトリを作成します。ディレクトリには、 OSX固有のメタデータを格納するために使用される__MACOSX
ファイル名で始まるAppleDoubleファイルが含まれています。._
コマンドラインユーティリティは、拡張属性、ファイルフラグ、リソースフォークなどのzip
メタデータを破棄します。これは、エイリアスファイルの情報がリソースフォークに保存されるため、タグなどのメタデータが失われ、エイリアスが機能しなくなることも意味します。
通常、OS X固有のメタデータを破棄することもできますが、どのメタデータファイルが含まれているかを確認するには、を使用できますxattr -l
。xattr
リソースフォークとファイルフラグも含まれます。これらは実際には拡張属性として保存されていなくても、拡張属性インターフェイスを介してアクセスできるためです。アーカイブユーティリティとzip
コマンドラインユーティリティの両方がACLを破棄します。
できません。
しかし、あなたができることは、zipした後にそれらの不要なフォルダを削除することです。コマンドラインzip
はさまざまな引数を取ります。1つは-d
、正規表現に基づいてコンテンツを削除するためのものです。したがって、次のように使用できます。
zip -d filename.zip __MACOSX/\*
サブフォルダを含む、.DS_Store
およびからの.zipをクリーンアップします。__MACOSX
zip -d archive.zip '__MACOSX/*' '*/__MACOSX/*' .DS_Store '*/.DS_Store'
ウォークスルー:
zip
に入力します(ただし、Enterキーは押さないでください)-d '__MACOSX/*' '*/__MACOSX/*' .DS_Store '*/.DS_Store'
zipinfo archive.zip
します(オプション)隠しファイルを圧縮しないでください。
zip newzipname filename.any -x "\.*"
この質問では、次のようになります。
zip newzipname filename.any -x "\__MACOSX"
ただし、zipコマンドはファイルを圧縮するだけでターミナルで実行され、他のファイルは圧縮されません。したがって、これを行うと結果は同じになります。
zip newzipname filename.any
存在するすべての答えを読んだ後、私はより良い解決策を持っています。1回の右クリックですべてをワークフローで実行できます。 追加のソフトウェア、複雑なコマンドライン、シェルトリックはありません。
オートマターワークフロー:
ステップ2:入力をパラメーターとして使用してShellコマンドを実行します。以下のコマンドをコピーします。
zip -d "$@" "__MACOSX/*" || true
zip -d "$@" "*/.DS_Store" || true
保存すれば完了です。フォルダまたはファイルのバルクを右クリックして、サービスメニューからワークフローを選択するだけです。メタデータのないアーカイブが一緒に作成されます。
zip
コマンドラインツールまたはFinderの圧縮コマンドを意味しますか?
についてzip
は、--data-fork
オプションを試すことができます。それでもうまくいかない場合は、試してみてください--no-extra
。ただし、uid / gidやファイル時間など、価値のある他のファイルメタデータは無視されているようです。
FinderのCompressコマンドの場合、その動作を制御するオプションはないと思います。単純な場合です。
他のツール、そしておそらくFinderが実際に内部で使用しているツールはですditto
。オプションを使用すると、-c -k
zipアーカイブが作成されます。このツールを使用すると、、、、を試してみることができます。--norsrc
また、--noextattr
オプションを省略したりすることもできます(manページによると、サブディレクトリを担当している可能性があります)。ただし、おそらく存在しないということは、AppleDouble形式を使用することを意味します。これにより、1つのディレクトリではなく、あらゆる場所に._ファイルが作成されます。--noqtn
--noacl
--sequesterRsrc
__MACOSX
--sequesterRsrc
__MACOSX
これは、コマンド__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
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固有のファイルなしで選択されたフォルダーを直接圧縮することです(最初に圧縮してから削除することはありません)。