2017-02-12 108 views
1

我有一组文件,其中有一些硬链接指向某些文件。 例如:Apache Commons压缩无法在tar中添加硬链接

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

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

当我使用Unix 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文件中的所有文件,我得到一个大小为2 MB的tar(files.tar)。

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

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

+0

您没有显示您的代码。我相信你必须检测硬链接并自己处理链接条目创建(在tar文件中)。 'org.apache.commons.compress.archivers.tar.TarConstants'包含soft('LF_SYMLINK')和hard('LF_LINK')链接的类型常量。 –

+0

感谢@JimGarrison的回应。我能够通过一些实验来解决问题。 –

回答

1

对于其他可能有相同问题的人,我可以通过以下方法解决问题: 1.确定文件是否为硬链接,有多种方法可以执行此操作。 2.一旦硬链接被识别,使用下面的方法来添加强硬文件中的焦油

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