Mac使用tar命令打包多出隐藏文件

现象

近期遇到了一个非常诡异的事情,在MacOS上打的tar包,在linux上解压多出了一些 ._ 开头的隐藏文件。

问题排查

我们来看下这个目录的内容, 然后我们来打包这个目录并MacOS查看压缩包的内容:

接下来我们把这个文件上传到linux服务器上,再查看这个压缩包的内容:

此时发现多了一个隐藏文件,那么问题来了,为什么会多?有程序读取这个文件就会出现异常!

问题原因

经过排查,发现 MacOS 上的tar,和linux的tar竟然不止同一个系列!

MacOS是将tar命令link到bsdtar

Linux是原生的GNU tar命令

发现了问题,就方便寻找解决方案。翻了翻bsdtar的文档(man手册也行)

手册中有非常明确的提示,这个是MacOS特有的,用于存储一些MacOS中文件特殊的属性。

问题验证

  1. 查看文件的特殊属性?
  2. mac上使用gnu tar查看是否也会有隐藏文件?


如图所示,确实与描述一致,使用xattr看到了扩展属性,使用gun tar也看到了隐藏文件

解决方案

方案一 使用COPYFILE_DISABLE=1参数

COPYFILE_DISABLE=1 tar -zcvf junit.tar.gz junit-4.13.jar

方案二 使用 --no-mac-metadata

tar --no-mac-metadata -zcvf junit.tar.gz junit-4.13.jar

方案三 使用gtar打包

  1. 通过homebrew安装guntar ( https://formulae.brew.sh/formula/gnu-tar )
  2. 使用gtar进行打包
最后修改:2021 年 06 月 25 日
如果觉得我的文章对你有用,请随意赞赏