Дивно, що ніхто інший не згадував про те, що сучасні версії 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
' on find
є важливим у цьому контексті - він копіює вміст каталогів, перш ніж встановлювати дозволи для самих каталогів. Коли я перевірив команду перед введенням доповнення до цієї відповіді, я скопіював деякі каталоги, доступні лише для читання (дозвіл 555); коли я пішов видаляти копію, мені довелося послабити дозволи на каталоги, перш ніж ' rm -fr /new/place
' міг закінчити. Без цієї -depth
опції cpio
команда була б невдалою. Я згадав це лише тоді, коли пішов робити чистку - наведена формула така автоматична для мене (головним чином, завдяки багатьом повторенням протягом багатьох років). ]