Странно, что никто другой не упомянул, что современные версии GNU tar
позволяют вам сжимать при объединении:
tar -czf output.tar.gz directory1 ...
tar -cjf output.tar.bz2 directory2 ...
Вы также можете использовать компрессор по вашему выбору при условии, что он поддерживает опции '-c
' (для stdout или из stdin) и '-d
' (для распаковки):
tar -cf output.tar.xxx --use-compress-program=xxx directory1 ...
Это позволит вам указать любой альтернативный компрессор.
[ Добавлено : если вы извлекаете из сжатых файлов gzip
или bzip2
, GNU tar
автоматически обнаруживает их и запускает соответствующую программу. То есть вы можете использовать:
tar -xf output.tar.gz
tar -xf output.tgz # A synonym for the .tar.gz extension
tar -xf output.tar.bz2
и они будут обработаны правильно. Если вы используете нестандартный компрессор, то вам нужно указать это при выполнении извлечения.]
Причиной разделения, как и в выбранном ответе, является разделение обязанностей. Среди прочего, это означает, что люди могут использовать программу «cpio
» для упаковки файлов (вместо tar
), а затем использовать выбранный компрессор (когда-то предпочтительным компрессором был pack
, позже это был compress
(который был намного эффективнее, чем pack
), а затем gzip
, который обвивал кольца вокруг обоих своих предшественников и полностью конкурировал с zip
(который был перенесен в Unix, но не является нативным там), а теперь bzip2
, который, по моему опыту, обычно имеет преимущество в 10-20% над gzip
.
[ Добавлено : кто-то заметил в своем ответе, что cpio
имеет забавные соглашения. Это правда, но до тех пор, пока GNU tar
не получит соответствующие параметры ('-T -
'), cpio
была лучшей командой, когда вы не хотели архивировать все, что находилось под данным каталогом - вы могли фактически выбрать, какой именно файлы были заархивированы. Недостатком cpio
было то, что вы не только могли выбирать файлы - у вас было для их выбора. Есть еще одно место, где cpio
забивает; он может сделать копию на месте из одной иерархии каталогов в другую без промежуточного хранилища:
cd /old/location; find . -depth -print | cpio -pvdumB /new/place
Кстати, опция -depth
в find
важна в этом контексте - она копирует содержимое каталогов перед установкой разрешений для самих каталогов. Когда я проверил команду перед вводом дополнения к этому ответу, я скопировал некоторые каталоги только для чтения (разрешение 555); когда я удалил копию, мне пришлось ослабить права доступа к каталогам, прежде чем 'rm -fr /new/place
' мог закончиться. Без опции -depth
команда cpio
не состоялась бы. Я вспомнил об этом только тогда, когда пошел на уборку - цитируемая формула является для меня автоматической (в основном благодаря многим повторениям в течение многих лет).
]