如何从 Zip 存档中排除文件

如何从 Zip 文件中排除文件

从 zip 存档中排除许多特定文件或一组匹配文件的最简单方法是跳过 easy zipping utility 内置于 Mac OS X 友好的 UI 中,并转到命令行,强大的 zip 命令就在其中。

这对百万用户来说非常有用一个原因,但这篇文章的主要动机与 .DS_Store 文件有关,这些文件与在 Mac 上创建的 zip 存档捆绑在一起,只会让另一台解压缩文件的机器变得混乱,无论它是在另一台 Mac、Windows PC 还是 linux 上.默认情况下,友好的 zip 工具和命令行 zip 实用程序都会发生这种情况,这是因为压缩工具的默认行为是包括隐藏文件,无论它们是 是否显示。这不一定是坏事,在许多情况下它会被认为是有用的,但如果您不希望它们或与此相关的任何其他文件出现在您的档案中,请继续阅读。

如何从 Zip 存档中排除文件

创建 zip 存档时文件排除的基础知识以 -x 标志为中心,该标志用于从存档中排除与特定名称或模式匹配的文件。在最基本的情况下,它看起来像这样:

zip archive.zip 文件 -x "ExcludeMe"

这意味着您可以排除单个文件,假设它名为“Nothanks.jpg”

zip archive.zip images/ -x "Nothanks.jpg!webp"

让我们介绍几个有用的具体示例。

从 Zip 存档中排除 .DS_Store 文件

这将防止通常不可见的 Mac 元数据 .DS_Store 文件 包含在 zip 存档中,默认情况下捆绑在:

zip -r archivename.zip archivedirectory -x "*.DS_Store"

但是,如果该目录包含子目录,您将需要使用该命令的另一个变体来从子目录中排除 ds_store 文件:

zip -r archive.zip directory -x "*/.DS_Store"

注意:并非所有 shell 都需要引号才能使此命令正常工作,但在 bash shell(Mac OS X 的默认设置)中,您需要使用引号来排除通配符和模式。

从 Zip 存档中排除特定文件类型

使用通配符,您还可以通过关注扩展名来排除某种类型的所有文件。例如,此命令将压缩整个目录,减去任何 .jpg 文件:

zip -r archive.zip 目录 -x "*.jpg!webp"

可以针对文件名中匹配的任何特定文件扩展名或模式进行修改。

从 Zip 存档中排除 .git 或 .svn 目录

压缩目录,减去 .git 及其内容:
zip -r zipdir.zip directorytozip -x "*.git*"

压缩文件夹,不包含 .svn 目录:
zip -r zipped.zip directory -x "*.svn*"

从 Zip 存档中排除所有隐藏文件

由于可以使用模式和通配符,您还可以通过 以句点为前缀,无论是 .svn 之类的目录还是 .bash_profile 或 .htaccess 之类的单个文件。

zip -r archivename.zip directorytozip -x "*.*"

或者从所有子目录中排除所有不可见文件:

zip -r archive.zip directory -x "*/.*"

Macworld 论坛的评论者干杯 有关从子目录中排除这些文件的精确语法。

Zip 存档图标

最终,这只是高级用户跳转到终端创建档案的另一个原因。凭借通配符支持、排除和可选的 密码保护 等强大的功能,它只是更多功能齐全,而且由于它全部包含在 Mac 上,因此您无需下载其他应用程序即可支持高级功能。

是的,从技术上讲,如果您决定留在 UI 中,您可以使用 Finder 和 Spotlight 搜索运算符 以在创建存档之前缩小 Mac OS X 中的文件夹内容,或者只是全选并手动 Command+单击每个文件以不包括在内,但这对于大型存档操作来说确实效率不高。因此,终端轻松胜出,尽管它以命令行为中心,但一旦您掌握了基础知识,它真的并不复杂。