Apache Commons Compress无法在tar中添加硬链接

时间:2017-02-12 06:14:13

标签: java tar apache-commons-compress

我有一组文件,其中有一些硬链接指向某些文件。 例如:

/tmp/test/file1
/tmp/test/file1_Link

file1是一个大小为1 MB的文件。 file1_Link是指向file1

的硬链接

当我使用unix tar命令来tar这两个文件时,生成的存档大小为1 MB(mytar.tar

tar -cvf ../mytar.tar .
-rw-r--r--  1 bsarraf  189060905   1.0M Feb 11 22:06 mytar.tar
-rw-r--r--  1 bsarraf  189060905   2.0M Feb 11 22:10 files.tar

但是,当我使用apache commons compress并添加tar文件中的所有文件时,我得到一个大小为2 MB(files.tar)的tar。

这意味着在tar中添加了两次相同的文件。

如何将tar中的硬链接文件添加为其他文件的硬链接?

1 个答案:

答案 0 :(得分:2)

对于可能遇到同样问题的其他人,我能够通过以下方法解决问题: 1.确定文件是否是硬链接,有多种方法可以做到这一点。 2.识别出硬链接后,使用以下方法在tar

中添加hardline文件
private void addLinkFileToTar(TarArchiveOutputStream tar, File linkFile, File file, String base)
        throws IOException {
    String entryName = base + linkFile.getName();
    TarArchiveEntry tarEntry = new TarArchiveEntry(entryName, TarConstants.LF_LINK);
    tarEntry.setLinkName(base+file.getName());
    tar.putArchiveEntry(tarEntry);
    tar.closeArchiveEntry();
}

这里linkFile是硬链接文件,文件是目标文件。