2017-02-12 110 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是硬鏈接文件和文件是目標文件。