前言

在 Mac 使用 finder 进行压缩,别人解压一看怎么有 .DS_Store__MACOSX 这些垃圾文件,有些杀毒软件还会报病毒,这怎么说理去。

其实 .DS_Store 是 Mac 用来记录文件夹图标的位置、窗口、排序偏好的。

__MACOSX 是备份用的,这些给其它操作系统都是没用的。

所以我们在压缩的时候需要把这些文件给排除掉,我试了下有两种方法可以做的

方法一

使用 zip ,把这些不需要的文件过滤掉

1
zip -r xxx.zip xxx -x "*/.DS_Store" "__MACOSX/*"
  • -r:意思是“递归”,也就是连文件夹里的子文件夹、子文件一起打包,不然包含压顶层文件。
  • xxx.zip 输出的压缩包名字
  • xxx 要压缩的文件夹
  • -x:表示“排除”,后面跟的文件或目录都不会被打进压缩包。
  • "*/.DS_Store" :匹配所有层级下的 .DS_Store 文件,(*表示任意路径)
  • "__MACOSX/*" :排除整个 __MACOSX 文件夹及其内容。

方法二

使用 ditto ,这个命令是系统自带的,所以不需要安装。

1
ditto -c -k --keepParent xxx xxx.zip
  • -c:表示“创建归档”(create archive)。
  • -k:指定输出格式为 zip(不然默认是另一种 Mac 专用格式,别人打不开)。
  • –keepParent:保留最外层的文件夹结构。比如你压缩的是 project/,解压后还是有个 project 文件夹;如果不加这个,里面的内容会直接“散”出来。
  • xxx 要压缩的源文件夹
  • xxx.zip 输出的压缩包名字

这个命令的好处是:不用手动排除任何东西, .DS_Store__MACOSX 默认就不会被打包进去,省心又干净。