如何在 Mac 上把每个文件或文件夹单独压缩

十个客户文件夹,每个客户只该收到自己的那一个。一周的录音,要一段一段上传。旧项目要归档,每个打成一个 ZIP。可是在访达中把它们全选,选取压缩,得到的只是一个装着所有内容的归档.zip。
简短的答案:
- 访达没有办法为每个项目各做一个归档。要么逐个压缩,要么使用下面的“终端”循环,它还可以做成快速操作。
- 在 Folia Files 中,选中项目,右键点按,移到压缩,在每个项目单独压缩下选择 ZIP、7Z、TAR.GZ 或 TAR.XZ。每个项目都会得到自己的归档,就放在它旁边。
访达的“压缩”做了什么
右键点按单个项目,选取压缩“Atlas”:你会得到一个以它命名的 ZIP,文件夹是 Atlas.zip,文件是 report.pdf.zip。选中多个项目时,这个命令会变成压缩3个项目(数字随所选数量而变),所有项目都会进入同一个文件夹里名为归档.zip的单个归档。
没有任何设置能让每个项目各得一个归档。要么一个一个压缩,要么交给一个小脚本。
在“终端”中逐个压缩
macOS 自带 ditto,这个复制工具也能像访达那样制作 ZIP 归档。一个简短的循环会为文件夹里的每个项目各运行一次:
- 打开“终端”(在“应用程序” › “实用工具”中)。
- 输入
cd和一个空格,把装着这些项目的文件夹拖到“终端”窗口上,然后按 ↩。 - 粘贴下面这几行,再按 ↩:
for item in ./*; do
[[ "$item" == *.zip || -e "$item.zip" ]] && continue
if [[ -d "$item" ]]; then
ditto -c -k --sequesterRsrc --keepParent "$item" "$item.zip"
else
ditto -c -k --sequesterRsrc "$item" "$item.zip"
fi
done
现在文件夹里的每个项目旁边都有了自己的 ZIP:Atlas 文件夹旁边是 Atlas.zip,report.pdf 旁边是 report.pdf.zip。文件夹里的每个文件和文件夹都会得到一个归档,所以请在只装着要归档的内容的文件夹里运行。各部分的作用如下:
./*依次处理文件夹里的项目,但不包括隐藏项目(名称以句点开头的)。前面的./可以防止以连字符开头的名称被当成选项。- 第二行会跳过 ZIP 文件本身,以及已经有归档的项目,所以循环运行两次也不会重做或覆盖任何东西。
- 文件夹用
--keepParent归档,解压后得到的就是这个文件夹本身。文件则单独归档:如果对文件使用--keepParent,ditto会把它放进一个以它所在文件夹命名的文件夹里。 --sequesterRsrc会把 Mac 特有的数据存放在归档内的__MACOSX文件夹中,和访达制作的 ZIP 一样。
名称里有空格或中文也没问题:每个 $item 都加了引号。
其他格式可以用 macOS 的 tar 命令来做。把 if … fi 这一段换成下面任意一行,并把第二行里的 .zip 换成相同的扩展名:
- TAR.GZ:
tar -czf "$item.tar.gz" "$item" - TAR.XZ:
tar -cJf "$item.tar.xz" "$item" - 7Z:
tar --format 7zip -cf "$item.7z" "$item"
如果你用 Folia Files,可以右键点按文件夹的空白处,选择在终端中打开:终端会直接在这个文件夹中打开,不用再 cd。官网版还有在面板下方打开的 Folia Files 终端,如下图所示。

把循环做成快速操作
想在访达中右键一点就能用:
- 打开“自动操作”,选取文件 › 新建,选择快速操作,然后点按选取。
- 在顶部那一行,把工作流程收到当前设为文件或文件夹,把第二个菜单设为 Finder.app。
- 把运行Shell脚本操作从资源库拖进工作流程。确认 Shell 显示的是 /bin/zsh,把传递输入设为作为自变量,再把其中的文字换成上面的循环,只是第一行改成
for item in "$@"; do(也就是你右键点按的项目)。 - 按 ⌘S 存储,取一个像“逐个压缩”这样的名称。
现在在访达中右键点按文件时,它会出现在快速操作下。设为 Finder.app 的快速操作不会出现在其他 App 的菜单中,原因见为什么你的自动操作快速操作只出现在访达中(官网版 Folia Files 照样会列出它)。
在 Folia Files 中:压缩 › 每个项目单独压缩
Folia Files 在任何显示方式下都能通过右键菜单完成:
- 选中项目:按住 ⌘ 点按或按住 ⇧ 点按,或按 ⌘A 全选。
- 右键点按其中一个,移到压缩。
- 上面的四种格式会像访达一样,把整个选择做成一个归档:归档.zip。每个项目单独压缩下的同样四种格式,则为每个项目各做一个归档。只要选中两个或更多项目,下面这一部分就会出现。

你会得到:
- 每个项目旁边一个归档,以项目命名:Atlas.zip、Design.zip……文件的名称里会保留扩展名,例如 Notes.md.zip,和访达一样。
- 不会替换任何东西。如果已经有 Atlas.zip,新的会叫 Atlas 2.zip。
- 可以来自多个文件夹。在“树状”显示方式中,可以选中不同子文件夹里的项目:每个归档都会放在各自项目的旁边。
- 新归档完成后会被选中,可以直接拖进邮件,或拖到另一个面板中打开的云端或服务器文件夹。
压缩和右键菜单中其他的归档与文件工具放在一起,详见文件工具页面。
在“操作”中查看进度、暂停或取消
Folia Files 会一个接一个地制作归档,而不是同时进行:几个压缩程序一起运行,只会争抢磁盘。每个归档在操作中占一行。“操作”是工具栏上的按钮,也会显示拷贝和移动的进度(也可以用窗口 › 正在进行的操作,⌃⌘O):
- 正在压缩为 .zip(或 .7z、.tar.gz……),附带根据开始前测得的大小计算的进度条、正在加入的文件名、已完成量与总量、速度和剩余时间。排队等候的归档显示正在准备…。
- 暂停按钮会让压缩程序停在原处,点按继续就从那里接着做。后面的归档会等待。
- ✕ 按钮(取消)可以停止一个归档。每个归档都以隐藏的名称写在项目旁边,完成后才换上真正的名称:所以取消的归档什么也不会留下,写到一半的文件也不会看起来像已完成。已经做好的归档会保留,其他的继续进行。
ZIP、7Z、TAR.GZ 还是 TAR.XZ?
- ZIP 在 Mac 和 Windows 电脑上都能双击打开,什么都不用安装。发给客户、同事,或不清楚对方用什么电脑时,就选它。
- 7Z 通常比 ZIP 小,文档、文本和代码尤其明显。但并不是每台电脑不装额外 App 就能打开,所以请留给装了这类 App 的人,或用于你自己的归档。
- TAR.GZ 是 Linux 服务器和开发者的习惯格式,会原样保留 Unix 权限和符号链接。
- TAR.XZ 一般比 TAR.GZ 更小,但制作起来更慢。
照片、视频和音乐本身已经压缩过,任何格式都不会让它们小很多。把它们归档是为了放在一起或方便发送,而不是为了节省空间。
再次打开
在 Folia Files 中,双击 ZIP、7Z 或 TAR 归档,它就会在面板中像文件夹一样以只读方式打开;提取到此处会解压到归档旁边,解压到则解压到另一个文件夹。详见如何在 Mac 上不解压就打开 ZIP 文件。
总结
- 访达:无论选了什么,整个选择都只会得到一个归档.zip。
- 终端:用上面的
ditto循环;TAR.GZ、TAR.XZ 和 7Z 用tar。同一个循环也可以放进“自动操作”的快速操作中。 - Folia Files:右键菜单的压缩 › 每个项目单独压缩,再选格式即可。每个项目旁边各一个归档,可在操作中查看进度,取消时什么也不会留下。


