Дивно, що ніхто інший не згадував про те, що сучасні версії 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команда була б невдалою. Я згадав це лише тоді, коли пішов робити чистку - наведена формула така автоматична для мене (головним чином, завдяки багатьом повторенням протягом багатьох років). ]