1

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

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

file1是一个大小为 1 MB 的文件。 file1_Link是指向的硬链接file1

当我使用 unixtar命令对这两个文件进行 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 ( files.tar) 的 tar。

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

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

4

1 回答 1

3

对于可能有同样问题的其他人,我可以通过以下方法解决问题: 1. 确定文件是否为硬链接,有多种方法可以做到这一点。2.一旦识别出硬链接,使用以下方法在tar中添加hardline文件

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 是目标文件。

于 2017-02-12T09:14:57.187 回答