Создайте tar.xz в одной команде

Я пытаюсь создать сжатый архив .tar.xz в одной команде. Каков конкретный синтаксис для этого?

Я пробовал tar cf - file | xz file.tar.xz, но это не работает.

Ответ 1

Используйте параметр сжатия -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>

Ответ 2

Коммутатор -J работает только на более новых системах. Универсальная команда:

Сделать архив .tar.xz

                tar cf - directory/ | xz -zf - > directory.tar.xz

Объяснение

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

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

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

  • Вы перенаправляете вывод из xz в файл tar.xz.

Ответ 3

Если вам нравится режим трубы, это наиболее чистое решение:

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.

Ответ 4

Попробуйте следующее: tar -cf file.tar file-to-compress ; xz -z file.tar

Примечание:

  • tar.gz и tar.xz не совпадают; xz обеспечивает лучшее сжатие.
  • Не используйте pipe |, потому что это запускает команды одновременно. Использование ; или & выполняет команды один за другим.