Создайте tar.xz в одной команде
Я пытаюсь создать .tar.xz
сжатый архив в одной команде. Какой конкретный синтаксис для этого?
я пытался tar cf - file | xz file.tar.xz
, но это не работает.
7 ответов
Использовать -J
опция сжатия для xz
, И не забудьте man tar
:)
tar cfJ <archive.tar.xz> <files>
Изменить 2015-08-10:
Если вы передаете аргументыtar
с тире (например:tar -cf
в отличие отtar cf
), то-f
опция должна быть последней, поскольку она указывает имя файла (спасибо A-B-B за указание на это!). В этом случае команда выглядит так:
tar -cJf <archive.tar.xz> <files>
Переключатель -J
работает только на новых системах. Универсальная команда это:
Сделать архив.tar.xz
tar cf - directory/ | xz -z - > directory.tar.xz
объяснение
tar cf - directory
читает каталог / и начинает переводить его в формат TAR. Выход этой операции генерируется на стандартном выходе.|
передает стандартный вывод на вход другой программы...... что случается
xz -zf -
, XZ настроен на создание (-z
) архив из файла (-f
) который является стандартным вводом (-
).Вы перенаправляете вывод с
xz
кtar.xz
файл.
Если вам нравится режим конвейера, это самое чистое решение:
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
Если вы хотите использовать параметры сжатия для 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 (
-a
или же
--auto-compress
). Тогда команда просто выглядит так:
tar caf file.tar.xz file
С этой опцией -a tar автоматически выводит используемое сжатие из окончания файла, используемого для архива!
Попробуй это: tar -cf file.tar file-to-compress ; xz -z file.tar
Замечания:
- tar.gz и tar.xz не совпадают; XZ обеспечивает лучшее сжатие.
- Не используйте трубу
|
потому что это запускает команды одновременно. С помощью;
или же&
выполняет команды одну за другой.
tar -I 'xz -9 -T0' -cf <archive.tar.xz> <files>
В этом подходе вы можете передавать аргументы вxz
также. Вы можете изменить аргументы по своему усмотрению.-9
для уровня сжатия и-T0
использовать много потоков.
Также он работает с другими инструментами сжатия, напримерzstd
tar -I 'zstd -18 -T0' -cf <archive.tar.ztd> <files>
Эта команда работает только на gnu-tar. Который поставляется с большинством дистрибутивов Linux. На Mac можно установитьgtar
https://formulae.brew.sh/formula/gnu-tar