Відповіді:
Використовуйте параметр -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
щоб вручну встановити xz
zip, хоча він за замовчуванням застосовує 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
) для багатослівного показує файли, що додаються в архів.