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

/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压缩并将所有文件添加到tar文件中时,我得到的tar大小为2 MB(files.tar)。

这意味着在tar中,同一文件被添加了两次。

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

最佳答案

对于其他可能遇到相同问题的人,我可以通过以下方法解决该问题:
1.确定文件是否为硬链接,可以通过多种方法进行。
2.确定硬链接后,使用以下方法将硬线文件添加到tar中

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是硬链接文件,而文件是目标文件。

10-06 06:01