Відповіді:
Використовуйте параметр -Jстиснення для xz. І пам'ятайте man tar:)
tar cfJ <archive.tar.xz> <files>
Редагувати 2015-08-10:
Якщо ви передаєте аргументи за tar допомогою тире (наприклад tar -cf, на відміну від tar cf), то -fпараметр повинен бути останнім , оскільки він визначає ім'я файлу (дякую @ABB, що вказав на це!). У цьому випадку команда виглядає так:
tar -cJf <archive.tar.xz> <files>
fостаннє, навіть без тире.
tarна macOS, схоже, підтримується, -Jале ця функція не надана на довільній сторінці. Довелося заглянути сюди. Хоча вони згадують XZ у розділі про --options...
Перемикач -Jпрацює лише на новіших системах. Універсальна команда:
Створити архів .tar.xz
tar cf - directory/ | xz -z - > directory.tar.xz
Пояснення
tar cf - directoryчитає каталог / і починає ставити його у формат TAR. Вихід цієї операції генерується на стандартному виході.
| стандартний вихід труб на вхід іншої програми ...
... що трапляється xz -z -. XZ налаштований для стиснення ( -z) архіву зі стандартного вводу ( -).
Ви перенаправити висновок з xzдо tar.xzфайлу.
-fне означає "з файлу" при передачі в xz. Замість цього він короткий --force(див. Xz (1) для деталей), і його краще не використовувати, якщо не потрібно.
tar cf - directory/ | xz -z -T0 - > directory.tar.xz
-1 -T0або -0 -T0як опції, які, як правило, все-таки дадуть вам файл меншого розміру, ніж gzip, за порівняльний або швидший час, тоді як за замовчуванням -6значно повільніше ніж gzip.
Якщо вам подобається режим труби, це найчистіше рішення:
tar c some-dir | xz > some-dir.tar.xz
Не потрібно ставити fопцію для роботи з файлами, а потім використовувати, -щоб вказати, що файл є стандартним входом. Також не потрібно вказувати -zваріант для xz, оскільки це за замовчуванням.
Він працює з gzipі bzip2занадто:
tar c some-dir | gzip > some-dir.tar.gz
або
tar c some-dir | bzip2 > some-dir.tar.bz2
Декомпресія також досить проста:
xzcat tarball.tar.xz | tar x
bzcat tarball.tar.bz2 | tar x
zcat tarball.tar.gz | tar x
Якщо у вас є лише tarархів, ви можете використовувати cat:
cat archive.tar | tar x
Якщо вам потрібно лише перелічити файли, використовуйте tar t.
Якщо ви хочете використовувати параметри стиснення для xzабо якщо ви використовуєте tarна MacOS, ви, ймовірно, хочете уникнути tar -cJfсинтаксису.
Відповідно man xz, спосіб це зробити:
tar cf - baz | xz -4e > baz.tar.xz
Тому що мені сподобався формат Войцеха Адама Кошека , але не інформація:
c створює новий архів для вказаних файлів. fчитає з каталогу (найкраще поставити цю секунду, тому що -cf! = -fc)- виходи на стандартний вихід| виводить труби до наступної командиxz -4eдзвінки xzз -4eопцією стиснення. (дорівнює -4 --extreme)> baz.tar.xz спрямовує націлений та стислий файл на baz.tar.xz де -4eє, використовуйте власні параметри стиснення. Я часто використовую -kв --keepвихідному файлі та -9насправді сильної компресії. -zщоб вручну встановити xzzip, хоча він за замовчуванням застосовує ZIP, якщо не вказано інше.
Щоб повторити звук Рафаеля ван Горна , скасувати і скасувати дію (див. Примітку нижче):
xz -dc baz.tar.xz | tar x
Примітка: на відміну від відповіді Рафаеля , використовуйте xz -dcзамість catxz. Документи рекомендують це у випадку, якщо ви використовуєте це для сценаріїв. Найкраще мати звичку використовувати -dабо --decompressзамість цього unxz. Однак, якщо потрібно, використання цих команд із командного рядка добре.
tar -cJfсинтаксис на MacOS? Просто цікаво, тому що я робив це саме зараз і, здавалося, працює.
Спробуйте це: tar -cf file.tar file-to-compress ; xz -z file.tar
Примітка:
| оскільки це виконує команди одночасно. Використання ;або &виконання команд одна за одною.Jваріанту, але це працює. Я думаю, що вам потрібен RHEL6.
tar -c file-to-compress | xz -z > file.tar.xz.
&не запускатиме команду одна за одною. Натомість він запустить перший як фоновий процес.
vдо перемикачів команд (tar -cJvf) для багатослівного показує файли, що додаються в архів.