Mac使用tar命令打包多出隐藏文件
现象
近期遇到了一个非常诡异的事情,在MacOS上打的tar包,在linux上解压多出了一些 ._
开头的隐藏文件。
问题排查
我们来看下这个目录的内容, 然后我们来打包这个目录并MacOS
查看压缩包的内容:
接下来我们把这个文件上传到linux服务器上,再查看这个压缩包的内容:
此时发现多了一个隐藏文件,那么问题来了,为什么会多?有程序读取这个文件就会出现异常!
问题原因
经过排查,发现 MacOS 上的tar,和linux的tar竟然不止同一个系列!
MacOS是将tar命令link到bsdtar
Linux是原生的GNU tar命令
发现了问题,就方便寻找解决方案。翻了翻bsdtar的文档(man手册也行)
手册中有非常明确的提示,这个是MacOS特有的,用于存储一些MacOS中文件特殊的属性。
问题验证
- 查看文件的特殊属性?
- 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打包
- 通过homebrew安装guntar ( https://formulae.brew.sh/formula/gnu-tar )
- 使用gtar进行打包