Я использовал «Сжать» из Наутилуса в папку 36 МБ. Он создал смолу под названием fs.tar.gz
.
Этот fs.tar.gz
имеет размер 98 МБ.
Как это возможно?
Я где-то читал, что символические ссылки или что-то подобное может вызвать это - у меня есть символические ссылки в моей папке.
Файл 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}
Я думаю, что при определенных условиях 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