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也看到了隐藏文件

shell

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

shell

tar --no-mac-metadata -zcvf junit.tar.gz junit-4.13.jar
  1. 通过homebrew安装guntar ( https://formulae.brew.sh/formula/gnu-tar )
  2. 使用gtar进行打包