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