没有__MACOSX文件夹的Mac zip压缩?

Sco*_*t B 149 macos zip

当我在Mac OSX中使用内置的zip压缩器压缩文件时,会导致在提取的zip中创建一个名为"__MACOSX"的额外文件夹.

我可以调整设置以防止创建此文件夹,还是需要购买第三方压缩工具?

更新:我刚刚找到OSX的免费应用程序解决了我的问题:" YemuZip "

更新2:YemuZip不再是免费软件

Chr*_*son 305

事后可以修复 zip -d filename.zip __MACOSX/\*

  • 还要删除.DS_Store文件:`zip -d filename.zip\*/.DS_Store` (47认同)
  • 这应该是公认的答案. (5认同)
  • 接受的答案说明如何不首先获取__MACOSX /目录,但没有说明如何处理现有的.zip文件.这个答案说如何摆脱__MACOSX /如果你已经得到它.然而,最初的问题是如何不首先获得它,所以接受的答案是正确的. (4认同)

sin*_*pop 75

当我遇到这个问题时,我已经从命令行完成了它:

zip file.zip uncompressed

编辑,经过多次downvotes:我之前使用过这个选项,我不知道我在哪里学到它,所以我不能给你一个更好的解释.克里斯约翰逊的回答是正确的,但我不会删除我的.正如一条评论所说的那样,它对OP的要求更为准确,因为它在没有这些文件的情况下进行压缩,而不是从压缩文件中删除它们.我发现它也更容易记住.

  • 这缺乏解释. (33认同)
  • 要递归压缩目录而不使用__MACOSX等:zip -rX file.zip uncompressed_directory (3认同)
  • __MACOSX /子目录包含Mac资源分支,并在使用Mac工具创建zip文件时创建.同样,Mac工具将使用__MACOSX /子目录来设置资源分支,你甚至都不会看到它.但是,如果您使用Mac工具创建zip文件和其他一些解压缩工具,您将获得__MACOSX /目录而不是资源分支.如果使用`zip`(第三方应用程序)创建文件,则首先不会创建__MACOSX /目录. (2认同)
  • 预防胜于治疗,简单胜于复杂。现在,如果我们将其添加为 Automator 服务,我们就拥有了生产力野兽。很好的解决方案。 (2认同)

pom*_*ini 50

在您希望压缩的文件夹内,在终端中:

zip -r -X Archive.zip *
Run Code Online (Sandbox Code Playgroud)

其中-X表示:排除那些不可见的Mac资源文件,如"_MACOSX"或"._Filename"和.ds存储文件

资源

注意:仅适用于您所在的文件夹和后续文件夹树,并且必须具有*通配符.

  • 这不会像您认为的那样工作:`-X`不排除.DS_Store文件.它可能适用于您的应用程序的原因是您只是压缩`*`,这是一个不以"."开头的通配符匹配文件.在包含点文件的目录上试一试,你会看到它被包含在内. (9认同)

Adi*_*ain 24

这个命令为我做了:

zip -r Target.zip Source -x "*.DS_Store"
Run Code Online (Sandbox Code Playgroud)

Target.zip是要创建的zip文件.Source压缩的源文件/文件夹.并且_x参数指定不包括的文件/文件夹.如果上述因任何原因无效,请尝试以下方法:

zip -r Target.zip Source -x "*.DS_Store" -x "__MACOSX"
Run Code Online (Sandbox Code Playgroud)

  • `zip`命令行实用程序永远不会创建`__MACOSX`目录,因此第一个代码段可以正常工作,并且不需要`-x"__MACOSX"部分. (7认同)

ben*_*ikt 14

我正在使用这个Automator Shell脚本来修复它.它显示为上下文菜单项(右键单击Finder中显示的任何文件).

while read -r p; do
  zip -d "$p" __MACOSX/\* || true
  zip -d "$p" \*/.DS_Store || true
done
Run Code Online (Sandbox Code Playgroud)
  1. 使用Automator创建新服务
  2. 在"Finder"中选择"文件和文件夹"
  3. 添加"Shell脚本操作"

automator shell脚本

Finder中的上下文菜单项

  • 虽然其他答案都很好,但我最喜欢这个答案,因为它可以以一种非常 Macish 的方式使用。 (2认同)

Ale*_*huk 8

你不能。

但您可以做的是在压缩后删除那些不需要的文件夹。命令行zip采用不同的参数,其中-d, 用于基于正则表达式删除内容。所以你可以这样使用它:

zip -d filename.zip __MACOSX/\*
Run Code Online (Sandbox Code Playgroud)


小智 7

也可以通过以下方式删除不需要的文件夹:

zip -d filename.zip "__MACOSX*"
Run Code Online (Sandbox Code Playgroud)

对我来说效果最好


nis*_*ama 6

命令zip行实用程序永远不会创建__MACOSX目录,因此您只需运行如下命令:

zip directory.zip -x \*.DS_Store -r directory
Run Code Online (Sandbox Code Playgroud)

在下面的输出中,a.zip我使用zip命令行实用程序创建的输出不包含__MACOSX目录,但a 2.zip我从 Finder 创建的输出包含目录。

$ 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
Run Code Online (Sandbox Code Playgroud)

-x .DS_Store不排除.DS_Store目录内的文件,但-x \*.DS_Store会排除。

包含多个文件的 zip 存档的顶层文件通常应该是单个目录,因为如果不是,某些解档实用程序(例如unzip7z,但不是 Archive Utility、The Unarchiver、unardtrx)不会为该文件创建包含目录。归档文件被提取时,通常会导致文件难以查找,并且如果同时提取多个类似的归档文件,则很难区分哪些文件属于哪个归档文件。

Archive Utility 仅__MACOSX在您创建存档时创建一个目录,其中至少有一个文件包含扩展属性、文件标志或资源分支等元数据。该__MACOSX目录包含文件名以 开头的 AppleDouble 文件,._用于存储 OS X 特定的元数据。命令zip行实用程序会丢弃扩展属性、文件标志和资源分支等元数据,这也意味着标签等元数据会丢失,并且别名会停止工作,因为别名文件中的信息存储在资源分支中。

通常您可以丢弃 OS X 特定的元数据,但要查看元数据文件包含哪些内容,您可以使用xattr -l. xattr还包括资源分支和文件标志,因为即使它们实际上没有存储为扩展属性,但可以通过扩展属性接口访问它们。存档实用程序和zip命令行实用程序都会丢弃 ACL。


小智 5

zip -r "$destFileName.zip" "$srcFileName" -x "*/\__MACOSX" -x "*/\.*"
Run Code Online (Sandbox Code Playgroud)
  • -x "*/\__MACOSX":忽略您提到的__MACOSX。
  • -x "*/\.*":忽略任何隐藏文件,例如.DS_Store。
  • 如果使用SPACE命名,请对变量加引号以避免文件。

另外,您可以构建Automator Service,以使其易于在Finder中使用。检查下面的链接以查看详细信息。

Github


Afa*_*kin 5

清理.DS_Store和中的 .zip __MACOSX,包括子文件夹:

zip -d archive.zip '__MACOSX/*' '*/__MACOSX/*' .DS_Store '*/.DS_Store'
Run Code Online (Sandbox Code Playgroud)

演练:

  1. 像往常一样通过右键单击文件(或文件夹)并选择“压缩...”来创建 .zip
  2. 打开终端应用程序(在 Spotlight 搜索中搜索终端)
  3. zip 在终端中输入(但不要按 Enter 键)
  4. 将 .zip 拖到终端,使其转换为路径
  5. 复制粘贴-d '__MACOSX/*' '*/__MACOSX/*' .DS_Store '*/.DS_Store'
  6. 按回车键
  7. 用于zipinfo archive.zip列出里面的文件,进行检查(可选)