Я пытаюсь создать сжатый архив .tar.xz в одной команде. Каков конкретный синтаксис для этого?
Я пробовал tar cf - file | xz file.tar.xz, но это не работает.
Я пытаюсь создать сжатый архив .tar.xz в одной команде. Каков конкретный синтаксис для этого?
Я пробовал tar cf - file | xz file.tar.xz, но это не работает.
Используйте параметр сжатия -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>
Коммутатор -J работает только на более новых системах. Универсальная команда:
Сделать архив .tar.xz
tar cf - directory/ | xz -zf - > 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.
Попробуйте следующее: tar -cf file.tar file-to-compress ; xz -z file.tar
Примечание:
|, потому что это запускает команды одновременно. Использование ; или & выполняет команды один за другим.