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, а файл - это целевой файл.