我有一组文件,其中有一些指向某些文件的硬链接。
例如:
/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是硬链接文件,而文件是目标文件。