Ответы:
Используйте параметр -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...
Switch -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к команде switch (tar -cJvf), чтобы быть подробным, показывает файлы, добавляемые в архив.