Crea un tar.xz en un comando

159

Estoy tratando de crear un .tar.xzarchivo comprimido en un comando. ¿Cuál es la sintaxis específica para eso?

Lo he intentado tar cf - file | xz file.tar.xz, pero eso no funciona.

George K.
fuente

Respuestas:

241

Use la -Jopción de compresión para xz. Y recuerda man tar:)

tar cfJ <archive.tar.xz> <files>

Editar 2015-08-10:

Si está pasando los argumentos tar con guiones (por ejemplo tar -cf, en lugar de tar cf), la -fopción debe ser la última , ya que especifica el nombre del archivo (¡gracias a @ABB por señalarlo!). En ese caso, el comando se ve así:

tar -cJf <archive.tar.xz> <files>

fuente
55
agregar val comando switches ( tar -cJvf) para que sea detallado muestra los archivos que se agregan al archivo.
Stuart Cardall el
77
Dado que el pedido es importante con el guión, probablemente sea mejor asumir que el pedido siempre es importante y poner el fúltimo, incluso sin el guión.
mwfearnley
1
¿Es posible pasar parámetros xz como -e (--extender)? Aparentemente no usará extendido por defecto.
Chmike
3
taren macOS parece ser compatible, -Jpero la función no se encuentra en la página del manual. Tuve que buscarlo aquí. Aunque mencionan XZ en la sección sobre --options...
cbarrick
1
@chmike Use la variable de entorno XZ_OPT. Por ejemplo, XZ_OPT = "- 9e -T0".
Dzenly
50

Switch -Jsolo funciona en sistemas más nuevos. El comando universal es:

Para hacer un archivo .tar.xz

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

Explicación

  1. tar cf - directorylee el directorio / y comienza a ponerlo en formato TAR. La salida de esta operación se genera en la salida estándar.

  2. | canaliza la salida estándar a la entrada de otro programa ...

  3. ... que resulta ser xz -z -. XZ está configurado para comprimir ( -z) el archivo de la entrada estándar ( -).

  4. Redirige la salida desde xzel tar.xzarchivo.

Wojciech Adam Koszek
fuente
16
-fno significa "desde el archivo" cuando se pasa a xz. En cambio, es la abreviatura de --force(ver xz (1) para más detalles), y es mejor no usarlo a menos que sea necesario.
Eliah Kagan
@EliahKagan Fijo. Gracias.
Wojciech Adam Koszek
2
Para usar la compresión multiproceso, se puede usar la opción -T0:tar cf - directory/ | xz -z -T0 - > directory.tar.xz
oidualc
Otra ventaja es que puede especificar fácilmente el nivel de compresión o cualquier otra opción para xz en la línea de comando. Por ejemplo, si desea acelerar la compresión y no le importa mucho el tamaño que puede usar -1 -T0o -0 -T0como opciones, lo que generalmente le dará un archivo más pequeño que gzip en un tiempo comparable o más rápido, mientras que el valor predeterminado -6es considerablemente más lento que gzip
fgwaller
38

Si te gusta el modo de tubería, esta es la solución más limpia:

tar c some-dir | xz > some-dir.tar.xz

No es necesario poner la fopción para manejar archivos y luego usar -para especificar que el archivo es la entrada estándar. Tampoco es necesario especificar la -zopción para xz, porque es predeterminada.

Funciona con gzipy bzip2también:

tar c some-dir | gzip > some-dir.tar.gz

o

tar c some-dir | bzip2 > some-dir.tar.bz2

La descompresión también es bastante sencilla:

xzcat tarball.tar.xz | tar x
bzcat tarball.tar.bz2 | tar x
zcat tarball.tar.gz | tar x

Si solo tiene tararchivo, puede usar cat:

cat archive.tar | tar x

Si necesita enumerar solo los archivos, use tar t.

Rafael van Horn
fuente
8

Usar las opciones de compresión xz

Si desea utilizar opciones de compresión xzo si está utilizando tarMacOS, probablemente desee evitar la tar -cJfsintaxis.

Según man xz, la forma de hacer esto es:

tar cf - baz | xz -4e > baz.tar.xz

Porque me gustó el formato de Wojciech Adam Koszek , pero no la información:

  1. c crea un nuevo archivo para los archivos especificados.
  2. flee desde un directorio (lo mejor es poner este segundo porque -cf! = -fc)
  3. - salidas a salida estándar
  4. | canaliza la salida al siguiente comando
  5. xz -4ellamadas xzcon la -4eopción de compresión. (igual a -4 --extreme)
  6. > baz.tar.xz dirige el archivo alquitranado y comprimido a baz.tar.xz

donde -4eestá, use sus propias opciones de compresión. A menudo utilizo -kpara --keepel archivo original y -9para la compresión muy pesado. -zpara establecer manualmente xzen zip, aunque el valor predeterminado es comprimir si no se indica lo contrario.

Descomprimir y descomprimir

Para hacer eco de Rafael van Horn , para descomprimir y descomprimir (ver nota a continuación):

xz -dc baz.tar.xz | tar x

Nota: a diferencia de la respuesta de Rafael , use en xz -dclugar de catxz. Los documentos recomiendan esto en caso de que esté usando esto para secuencias de comandos. Es mejor tener el hábito de usar -do en --decompresslugar de hacerlo unxztambién. Sin embargo, si debe hacerlo, usar esos comandos desde la línea de comandos está bien.

Connor
fuente
¿Alguna razón en particular para no usar la tar -cJfsintaxis en MacOS? Solo curiosidad, porque estaba haciendo eso justo ahora y parecía estar funcionando.
Lo-Tan el
2
@ Lo-Tan Funciona si tienes alquitrán. Cuando lo estaba usando no tenía la versión correcta de tar, así que no funcionó para mí. También quería usar las opciones de compresión para xz, que no puedes hacer si usas tar. Además, la sintaxis de tuberías es más fácil de recordar para mí, por lo que tiendo a usarla. Pero a cada uno lo suyo
Connor
4

Prueba esto: tar -cf file.tar file-to-compress ; xz -z file.tar

Nota:

  1. tar.gz y tar.xz no son lo mismo; xz proporciona una mejor compresión.
  2. No use pipe | porque esto ejecuta comandos simultáneamente. Usando ;o &ejecuta comandos uno tras otro.
Jhim Preston
fuente
+1 En RHEL 5.10, no veo una Jopción, pero esto funciona. Creo que necesitas RHEL6.
Brian
2
¿Por qué no ajustar los comandos para canalizar la salida de tar a xz?
mwfearnley
@mwfearnley Creo que la nota es simplemente para enfatizar que los comandos deben ejecutarse secuencialmente. Dado que el nombre del archivo se usa en ambos comandos, no escribirán ni leerán datos de la salida o entrada estándar. Si usa el comando sin especificar el nombre del archivo, se pueden encadenar, como tar -c file-to-compress | xz -z > file.tar.xz.
Jack Q
El uso &no iniciará un comando uno tras otro. En su lugar, lanzará el primero como un proceso en segundo plano.
Luis Lavaire