Создайте 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

объяснение

  1. tar cf - directory читает каталог / и начинает переводить его в формат TAR. Выход этой операции генерируется на стандартном выходе.

  2. | передает стандартный вывод на вход другой программы...

  3. ... что случается xz -zf -, XZ настроен на создание (-z) архив из файла (-f) который является стандартным вводом (-).

  4. Вы перенаправляете вывод с 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

Потому что мне понравился формат Войцеха Адама Кошека, а не информация:

  1. c создает новый архив для указанных файлов.
  2. f читает из каталога (лучше всего поставить эту секунду, потому что -cf знак равно -fc)
  3. - выводит на стандартный вывод
  4. | вывод труб к следующей команде
  5. xz -4e звонки xz с -4e вариант сжатия. (равно -4--extreme)
  6. > 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

Замечания:

  1. tar.gz и tar.xz не совпадают; XZ обеспечивает лучшее сжатие.
  2. Не используйте трубу | потому что это запускает команды одновременно. С помощью ; или же & выполняет команды одну за другой.
      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

Другие вопросы по тегам