Странно, что никто другой не упомянул, что современные версии GNU tarпозволяют сжимать при связывании:
tar -czf output.tar.gz directory1 ...
tar -cjf output.tar.bz2 directory2 ...
Вы также можете использовать компрессор по вашему выбору при условии, что он поддерживает параметры ' -c' (в стандартный вывод или из стандартного ввода) и ' -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команда не удалась бы. Я вспомнил об этом только тогда, когда пошел делать очистку - цитируемая формула для меня автоматическая (в основном в силу многих повторений на протяжении многих лет). ]