2017-02-12 5 views
1

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

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

file1 представляет собой файл с размером 1 Мбайт. file1_Link это жесткая ссылка указывает на file1

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

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

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

+0

Вы не показали свой код. Я считаю, что вам приходится обнаруживать жесткие ссылки и самостоятельно обрабатывать создание ссылок (в файле tar). 'org.apache.commons.compress.archivers.tar.TarConstants' содержит константы типов для мягких (' LF_SYMLINK') и жестких ('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 является жестким файлом Ссылки и файл является целевым файлом.

Смежные вопросы