Windows 下 7-Zip 对于 Pax Headers 的处理

简述

前几天(最近好忙啊)又遇到了 7-Zip 不能正确处理 tar 压缩文件后生成的 PaxHeaders.XXXXX,将其直接解压出去的问题。一般情况下这个不太影响使用,只是这次因为有一个程序需要遍历整个目录,把 PaxHeaders.XXXXX 也当作一部分进行加载,导致程序报错无法使用。

解决方案

因为 7zFM.exe 肯定是不能直接用了,我的做法是用 7z.exe 的过滤参数。于是简化一下如下所示:

1
2
$env:PATH+=';C:\Program Files\7-Zip\'
7z x -xr!PaxHeaders* archive.tar

第一行是暂时把 7-Zip 的路径添加到 PATH(PowerShell),第二行 -x 表示不包含,-r 表示递归,也就是所有的目录,! 表示统配(wildcard)。这样解压就不会把 PaxHeaders.XXXXX 解压出来了。

不过这只能解压 .tar 的文件,但是一般使用的情况下都是 .tar.xz 或者 .tar.gz 进行压缩后的,考虑过能不能像在 Linux 下一样用管道(pipe)直接二次解压。测试后发现 Windows 下的管道有问题,做不到这样子,只能先把 .tar 解压出来再用这个命令。没办法,凑合用吧。