файл tar больше, чем оригинальная папка?

Я использовал «Сжать» из Наутилуса в папку 36 МБ. Он создал смолу под названием fs.tar.gz.

Этот fs.tar.gz имеет размер 98 МБ.

Как это возможно?

Я где-то читал, что символические ссылки или что-то подобное может вызвать это - у меня есть символические ссылки в моей папке.

4
задан 6 October 2014 в 09:03

2 ответа

Файл tar имеет накладные расходы, поскольку он также включает информацию о том, как воссоздать файлы. Если содержимое, которое вы добавили в сам файл tar, уже сжато, вы можете получить файл большего размера, чем все Mib-файлы всех файлов вместе. Но ... мы говорим о небольшом количестве накладных расходов. Не как 2 раза размер всех файлов. Это действительно пахнет как символические ссылки.

Вы можете использовать tar -tvf fs.tar.gz | more, чтобы найти файлы, которые были включены, но там, где «не должно быть». Если и символическая ссылка, и файл находятся в каталогах, которые вы используете для создания файла tar, вы получите оба файла.

  • Tar имеет возможность не архивировать символические ссылки; со страницы руководства:

    -h, --dereference
    don't archive symlinks; archive the files they point to
    

    Будьте осторожны, когда возитесь с символическими ссылками: в конечном итоге вы можете закончить сломанными, которые вам нужно исправить самостоятельно.

  • Tar позволяет исключать файлы с помощью `--exclude {PATTERN} или --exclude_from {FILE}. Это позволяет вам включить символическую ссылку и из этого файла и пропустить сам файл.

  • Чтобы включить только файлы, но не символическую ссылку, вы можете использовать find /dir1 -type f |tar {etc}

0
ответ дан 6 October 2014 в 09:03

Я думаю, что при определенных условиях tarring может создать НАМНОГО больших выходов. У меня та же проблема, что и у ОП, на порядок выше. Папка, которую я храню, имеет размер 3,2 КБ, а выходной файл tar - 4 МБ, что в 1000 раз больше размера оригинала.

Воспроизведите его самостоятельно - я создаю сотню каталогов в папке с именем playstation, а затем по 26 пустых файлов в каждом из этих каталогов:

$ mkdir -p playground/dir-{00{0..9},0{10..99},100}
$ touch playground/dir-{00{0..9},0{10..99},100}/file{A..Z}
$ tar cf playground.tar playground
0
ответ дан 6 October 2014 в 09:03

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

Похожие вопросы: