检查压缩存档是否损坏
Check compressed archive for corruption
我正在用 tar
和 bzip2
使用 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
压缩。这就是第二个命令正常工作的原因。
我正在用 tar
和 bzip2
使用 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
压缩。这就是第二个命令正常工作的原因。