检查压缩存档是否损坏

Check compressed archive for corruption

我正在用 tarbzip2 使用 jarchivelib which utilizes org.apache.commons.compress 创建压缩档案。

try {
    Archiver archiver = ArchiverFactory.createArchiver(ArchiveFormat.TAR, CompressionType.BZIP2);
    File archive = archiver.create(archiveName, destination, sourceFilesArr);
} catch (IOException e) {
    e.printStackTrace();
}

有时创建的文件可能会损坏,所以我想检查一下并在必要时重新创建存档。没有抛出任何错误,我在尝试使用 tar -xf file.tar.bz2 手动解压缩时检测到损坏(注意: 使用 tar -xjf file.tar.bz2 提取完美无缺)

tar: Archive contains `40[=11=]335@[=11=][=11=][=11=][=11=]364' where numeric off_t value expected
tar: Archive contains `[=11=]l`\t[=11=]1[=11=]' where numeric mode_t value expected
tar: Archive contains `[=11=]315[=11=][=11=][=11=][=11=][=11=]61[=11=]p0' where numeric time_t value expected
tar: Archive contains `[=11=]0[=11=]1\b[=11=]3[=11=]' where numeric uid_t value expected
tar: Archive contains `l[=11=]10[=11=]0[=11=]13' where numeric gid_t value expected
tar: BZh91AY&SY"'ݛ[=11=]34>7777777777777777777777777777777777327750X[=11=]10: Unknown file type `', extracted as normal file
tar: BZh91AY&SY"'ݛ�>��������������������������������������X�: implausibly old time stamp 1970-01-01 00:59:59
tar: Skipping to next header
tar: Exiting with failure status due to previous errors

有没有办法使用 org.apache.commons.compress 检查压缩存档是否损坏?由于文件可能有几 GB 的大小,因此不解压缩的方法会很好。

由于 bzip2 压缩会产生一个流,如果不解压该流并将其传递给 tar 进行检查,就无法检查是否损坏。

无论如何,在您的情况下,您实际上直接使用 tar 解压缩,而不是先传递给 bzip2。这是根本原因。您需要始终将 -j 标志用于 tar,因为它被 bzip2 压缩。这就是第二个命令正常工作的原因。