Apache Commons Compress не может добавить жесткую ссылку в tar

У меня есть набор файлов, в которых есть несколько жестких ссылок, указывающих на некоторые файлы. Например:

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

file1 файл размером 1 МБfile1_Link это жесткая ссылка, указывающая на file1

Когда я использую Unix tar Команда tar эти оба файла, результирующий архив имеет размер 1 МБ (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 и добавляю все файлы в файл tar, я получаю tar размером 2 МБ (files.tar).

Это означает, что в tar один и тот же файл был добавлен дважды.

Как я могу добавить файл жесткой ссылки в tar как жесткую ссылку на другой файл?

1 ответ

Для тех, у кого может быть такая же проблема, я смог решить проблему следующим способом: 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 - это жесткий файл Link, а файл - это целевой файл.

Другие вопросы по тегам