今天我遇到了一个问题,我无法在 Windows 上使用 Commons-compress 使用 Java 压缩文件,因为其中一个文件名超过 100 个字符。我正在寻找解决方案并发现:
根据https://commons.apache.org/proper/commons-compress/tar.html
TAR 格式有多种不同的方言,甚至可能有不同的 TAR 格式。 tar 包包含特殊情况,以便读取许多现有的方言,并且默认情况下会尝试以原始格式(通常称为“ustar”)创建存档。此原始格式不支持长度超过 100 个字符或大于 8 GiB 的文件名,如果您尝试编写超出这些限制的条目,tar 包默认会失败。 “ustar”是所有现有 tar 方言的共同点,并且大多数现有工具都可以理解。
LONGFILE_POSIX:使用 POSIX 1003.1 定义的 PAX 扩展标头。大多数现代 tar 实现都能够提取此类档案。自 Commons compress 1.4 起
该文档提到“最现代的 tar 实现”。哪些常用的 tar 实现不支持通过 PAX 标头长度超过 100 个字符的文件名?不支持 PAX 扩展标头的 tar 实现是否仍然常用?我仍然需要能够使用 Linux 和 Unix 上的常见 tar 实现在 Windows 上打开使用 Commons-Compress 创建的 .tar.gz 文件。
答案1
我刚刚成功打包并解压了一个 tar 存档,其中包含:
touch $(for i in {1..222}; do echo -n a; done)
file test.tar
test.tar: POSIX tar archive (GNU)
所以在 Linux 中应该没有问题,至少 Fedora 32.7z/WinRAR 都可以打开同一个压缩包并成功解压文件。
至于 Commons-Compress 扩展/格式我不知道,因为http://www.gnu.org/software/tar/manual没有类似的东西。
也许您可以分享这样的档案,以便对其进行测试?