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

Java Apache Commons Compress无法在tar中添加硬链接,java,tar,apache-commons-compress,Java,Tar,Apache Commons Compress,我有一组文件,其中有一些指向某些文件的硬链接。 例如: /tmp/test/file1 /tmp/test/file1_Link file1是一个大小为1MB的文件。 file1\u链接是指向file1 当我使用unixtar命令对这两个文件进行tar时,生成的归档文件大小为1MB(mytar.tar) 但是,当我使用ApacheCommons压缩并将所有文件添加到tar文件中时,会得到一个大小为2MB的tar(files.tar) 这意味着在tar中,相同的文件被添加了两次 如何在tar中添

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

/tmp/test/file1
/tmp/test/file1_Link
file1
是一个大小为1MB的文件。
file1\u链接
是指向
file1

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

但是,当我使用ApacheCommons压缩并将所有文件添加到tar文件中时,会得到一个大小为2MB的tar(
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是硬链接文件,file是目标文件。

您没有显示代码。我相信您必须自己检测硬链接并处理链接条目的创建(在tar文件中)
org.apache.commons.compress.archivers.tar.TarConstants
包含软(
LF\u-SYMLINK
)和硬(
LF\u-LINK
)链接的类型常量。感谢@JimGarrison的回复。我通过一些实验解决了这个问题。
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();
}