如何删除 macOS 压缩包中的隐藏文件 | 一日一技

压缩打包是文件管理中不可缺少的功能。多个文件或文件夹压缩后,便于传输,也可避免损坏或缺失。macOS 系统中,我们一般使用访达(Finder)右键菜单中的压缩功能,十分方便。然而却有个问题,就是压缩后的文件中包含 __MACOSX、.DS_Store 等 macOS 系统隐藏文件。

如果是在 macOS 系统上进行解压或查看,这些文件是隐藏的,没有什么影响。但如果是发送给 Windows 系统用户,则解压后这些文件就会显示出来,可能引起对方的疑惑,造成不必要的麻烦。

压缩文件中的隐藏文件
压缩文件中的隐藏文件

其实,我们可以使用 macOS 自带的自动化软件自动操作(Automator)来解决这个问题。

解决方法

这里,可以下载我制作的 净化Zip压缩文件.workflow.zip ,解压后双击安装。

服务安装
服务安装

之后,如果需要去除 Zip 压缩文件中的系统隐藏文件,直接选择其右键菜单服务项目中的「净化Zip压缩文件」即可。处理完成时,还会发出提醒。

演示
演示

原理

使用「自动操作」打开后,可以看到其内容并不复杂。首先,其工作范围设定在“访达中的文件或文件夹”,这样就只会在这些位置的右键菜单中出现。当然,你也可以根据自己的需要进行修改。具体的文件处理操作则是由 Shell 脚本完成的。处理完成后发出通知提醒。

内部流程
内部流程

Shell 脚本内容如下,同样是使用的 macOS 自带命令,不需要额外安装软件也无需网络,支持多文件批量操作。脚本的大致流程为:对选中的每个文件,判断是否为 zip 压缩文件,如果是则进行净化操作。

# 循环处理选择的多个文件
for f in "$@"
do
    # 获取文件类型,以确保是 Zip 压缩文件
    fileType=$(file -bI "$f")
    if [[ $fileType =~ "application/zip*" ]]; then
        # 删除 __MACOSX 与 .DS_Store 文件
        zip -d "$f" \*__MACOSX\*  || true
        zip -d "$f" \*.DS_Store\* || true
    fi
done

结语

其实,__MACOSX 与.DS_Store 是 macOS 系统用来保存文件夹自定义图标、其中文件位置等元数据信息的。如果 Zip 压缩文件始终在 macOS 上使用,这些文件就不会显示出来,也不必去除这些文件。

你也可以使用 KekaBetterZip 等压缩软件,它们都具有压缩时排除 __MACOSX 与.DS_Store 等文件的功能。

「自动操作」的功能十分强大,如果想进一步了解,可以在少数派网站中搜索 Automator,也可以看这些文章:

> 下载 少数派 iOS 客户端、关注 少数派公众号,了解更多实用小技巧 💡