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
当我使用unixtar
命令对这两个文件进行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();
}