Пытаюсь заархивировать старые файлы (1000+) и думаю о двух вариантах

  1. gzip отдельные файлы, а затем создать zip

  2. создать gzip, используя tar cvzf для группы файлов

Не уверен, что будет наиболее эффективным с точки зрения хранения пространства.

Любая информация, которая поможет понять, что лучше всего?

0
muru 26 Окт 2021 в 05:47
1
Я бы предположил B) смолить их со сжатием. Сжатие работает (вид 100 000 футов), находя повторяющиеся строки битов и заменяя их более коротким указателем на общую строку битов для распаковки. Следовательно, сжатие более эффективно при работе с большими блоками данных.
 – 
waltinator
26 Окт 2021 в 05:28
(и это ^ лучше всего видно в тривиальном случае, когда у вас есть более 1000 одинаковых файлов)
 – 
muru
26 Окт 2021 в 05:48
Tar-then-compress также сжимает отступы и заголовки в tar-файле, что может иметь большое значение, если имеется много небольших файлов.
 – 
Michael Homer
26 Окт 2021 в 07:30
Кроме того, если под «создать zip» вы подразумеваете файл «.zip» (например, с zip или 7z и т. д.), то, если вам не нужно перенести архив на машину, на которой нет tar и gzip в качестве стандартных утилит ( например windows) и на которые вы не можете установить tar и gzip (не верно для windows, есть несколько реализаций для win), тогда не используйте zip в unix или linux. zip, unzip, 7z и т. д. полезны в unix/linux в качестве инструментов совместимости, но вам лучше использовать собственные инструменты, такие как tar, cpio или pax (для архивирования) и gzip, bzip2, xz и т. д. (для сжатия).
 – 
cas
26 Окт 2021 в 08:15

1 ответ

Использование gzip, а затем zip излишне. Zip имеет собственное сжатие, хотя оно может быть или не быть таким же высоким, как gzip. Использование zip, вероятно, лучше, если вы хотите извлечь отдельные файлы из полученного архива.

Использование tar для сбора файлов, а затем gzip, вероятно, даст вам более высокую степень сжатия, так как вы можете получить сжатие между файлами, а также внутри файлов. Тем не менее, вы должны распаковать их вместе, чтобы даже получить список того, что находится в архиве, а также извлечь отдельные файлы. Если вы всегда будете извлекать весь архив, это спорно.

Обратите также внимание, что вы можете сделать все это за один шаг. Например,

tar cf - somedir | gzip -9 > somedir.tar.gz

Или эквивалентно

tar czf somedir.tar.gz somedir

В качестве альтернативы вы можете использовать xz (или вариант J вместо z), который обеспечивает еще более высокую степень сжатия за счет значительно более длительного времени сжатия. (Но если это долгосрочное архивирование, вам может быть все равно, сколько времени потребуется на сжатие.)

0
user10489 26 Окт 2021 в 08:20