POSIX tar 档案包含 POSIX 标头作为名为 的“虚拟”文件@PaxHeader
。7zip 会尽职尽责地提取它们,但它们都发生冲突,因为它们都具有相同的名称。然后 7z 会抱怨该文件正在使用中,并以错误结束。它确实提取了其他文件,而且扩展标头在 Windows 上无论如何都无用。
.tar.xz
此问题出现在Windows 上构建 Qt 时提取 Qt 档案的背景下。.tar.xz
文件比文件更紧凑.zip
,有助于减少 CI 环境中的负载,因为在 CI 环境中,Qt 可能会经常被下载和重建。
有办法解决这个问题吗?
答案1
使用“Git for Windows”安装的 tar.exe 可以处理 POSIX tarball。
许多 tar.exe 和其他压缩程序(如 7-zip)也可以处理 tarball,但有时(并非总是)会因包含 Paxheaders 的存档而失败。大多数程序中都有一些参数,可以很容易地忽略提取 POSIX tarball 时的错误。可能的错误包括文件名过短和文件名没有扩展名(可能还有其他错误)。
“Git for Windows” 中的 tar.exe 可以“独立”使用,即在 git-bash 之外的 Windows 命令文件中或在提示符下使用。最好的解决方案是使用安装的完整路径:
C:\Program Files\Git\usr\bin\tar.exe -xf archive.tar.gz
git 安装的路径可能因您的安装而异。请确保使用正确的 tar.exe。
which tar.exe
或者
where tar.exe
可能会有帮助。
答案2
当使用 列出时7z l
,这些.tar
档案包含大量名为 的同名文件.\.\@PaxHeader
。将此文件名添加到提供给 7z 的排除列表中即可解决问题。
排除可以在命令行上提供,即"-x.\.\@PaxHeader"
,或者在排除列表文件中提供,例如[email protected]
,其中my.excludes
文件至少包含.\.\@PaxHeader
行。