如何从 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 论坛的评论者干杯 有关从子目录中排除这些文件的精确语法。
最终,这只是高级用户跳转到终端创建档案的另一个原因。凭借通配符支持、排除和可选的 密码保护 等强大的功能,它只是更多功能齐全,而且由于它全部包含在 Mac 上,因此您无需下载其他应用程序即可支持高级功能。
是的,从技术上讲,如果您决定留在 UI 中,您可以使用 Finder 和 Spotlight 搜索运算符 以在创建存档之前缩小 Mac OS X 中的文件夹内容,或者只是全选并手动 Command+单击每个文件以不包括在内,但这对于大型存档操作来说确实效率不高。因此,终端轻松胜出,尽管它以命令行为中心,但一旦您掌握了基础知识,它真的并不复杂。