Untar, ungz, gz, tar: ¿cómo recuerdas todas las opciones útiles?

76

Estoy bastante seguro de que no soy el único con el siguiente problema: cada vez que necesito descomprimir un archivo en * nix, no recuerdo todos los interruptores y termino buscando en Google, lo cual es sorprendente teniendo en cuenta la frecuencia con la que necesito hacer esto.

¿Tienes una buena hoja de trucos de compresión? ¿O qué tal una mnemónica para todos esos desagradables interruptores en alquitrán?

Estoy haciendo este artículo un wiki para que podamos crear una buena hoja de trucos aquí.

Ah, y sobre las páginas man: si hay algo para lo que no son útiles, es para descubrir cómo descomprimir un archivo.

programador muerto
fuente
1
usa las páginas del manual, entonces no tienes que crear un wiki, y solo tienes que recordar el comando man :-) man (1)
Florenz Kley
9
eXtract Zee File es como lo recuerdo
Canadian Luke
Crear Zee Vocking File podría ser apropiado para crear un .tar.gz
CousinCocaine

Respuestas:

65

¿O qué tal usar el shell con capacidades de finalización avanzadas (como zsh o versiones nuevas de bash) que completarán las opciones para usted, con ayuda integral? :))

Con respecto al alquitrán: solo mira el teclado "qwerty". Hay letras "zxcvf" una al lado de la otra. Necesita "tar czvf file.tar.gz files" o "tar xzvf file.tar.gz".

Adepto
fuente
Atrezzo para responder la pregunta :)
¡Ahora, ese es un consejo COOL "qwerty"! :)
jodidamente increíble!
deadprogrammer
2
Otro consejo es que la zopción (o la jopción para .bz2archivos) no es necesaria cuando se extrae con versiones modernas de tar. Descomprime automáticamente el archivo.
Nate
10
He usado alquitrán unas diez mil millones de veces y nunca me di cuenta de que todas las opciones más utilizadas están una al lado de la otra en el teclado. headsmack
Tyler McHenry
41

Resumen de opciones de alquitrán

Todos pueden editar esto para agregar más interruptores esotéricos, pero aquí están los conceptos básicos:

  • x - extraer archivos
  • c - crear archivo
  • t - archivos de lista
  • v - detallado (enumera los archivos a medida que los procesa)
  • j - usa compresión bz2
  • z - usa compresión gz
  • f - lee o escribe archivos en el disco

Ejemplos

Descomprima un archivo tar.gz: tar zxf tarball.tar.gz

Descomprima un archivo tar.bz2 : tar jxf tarball.tar.bz2

Cree un archivo tar.gz: tar zcvf tarvall.tar.gz mydir / *

anon
fuente
23

Hay un pequeño script de Perl llamado "unp".

unp filename.tar.gz

... y extrae todo. Funciona con cualquier archivo comprimido siempre que tenga los binarios correctos. Y simplemente te olvidas de la sintaxis o de esa basura. Verifique los repositorios de su distribución de Linux. Debería estar allí (al menos en Arch, Debian y Ubuntu).

Vicent Marti
fuente
Incluso después de usar tar durante bastante tiempo, todavía necesito buscar en Google las estúpidas banderas. Und es el camino a seguir.
Yada
8

Realmente con un uso frecuente, hago la diferencia entre extraer datos (x) y comprimir datos (c):

Extraer:

tar xzf data.tgz

Para comprimir:

tar czf data.tgz

Además, también puede agregar dos funciones a su .bashrc:

function extract () {     
        if ($# -ne 1); then
                echo "Usage: $0  `<compressed archive>"`
                exit 1
        fi
        tar xzf $1
}

function compress () {
        if ($# -ne 2); then
                echo "Usage: $0 `<compressed archive> <files|directories>"`
                exit 1
        fi
        tar czf $1 $2
}

Hay otra buena función de extracción, detecta la extensión de su archivo comprimido y hace el trabajo por usted:

extract () {
   if [ -f $1 ] ; then
       case $1 in
           *.tar.bz2)   tar xvjf $1    ;;
           *.tar.gz)    tar xvzf $1    ;;
           *.bz2)       bunzip2 $1     ;;
           *.rar)       unrar x $1       ;;
           *.gz)        gunzip $1      ;;
           *.tar)       tar xvf $1     ;;
           *.tbz2)      tar xvjf $1    ;;
           *.tgz)       tar xvzf $1    ;;
           *.zip)       unzip $1       ;;
           *.Z)         uncompress $1  ;;
           *.7z)        7z x $1        ;;
           *)           echo "don't know how to extract '$1'..." ;;
       esac
   else
       echo "'$1' is not a valid file!"
   fi
 }
anon
fuente
5

Solo escribe tar --helpy ahí está tu hoja de trucos.

Jeremy Ruten
fuente
12
en serio, ¿alguna vez has intentado leer esa página de manual?
deadprogrammer
Puede ser un poco ilegible y largo, pero creo que funciona bien solo con buscar el nombre de una opción. También puede buscar la opción que está buscando, es decir, 'tar --help | extracto de grep ".
Jeremy Ruten
1
Excelente. Y luego tienes que pasar por una página de manual que (entre las cosas que estás buscando) te dice toneladas de comandos y opciones arcaicos de transmisión sin conexión, excepto las necesidades del desarrollador.
2
Realmente no veo lo que es tan difícil al respecto. Para extraer un archivo, simplemente encuentre la opción de extracción y agregue -x a su comando. Si lo quiere detallado, encuentre esa opción y agregue av para obtener -xv. Luego continúe hasta que obtenga el comando exacto que desea. Incluso tiene comandos de ejemplo para operaciones comunes.
Jeremy Ruten
1
Jeremy, el verdadero problema es que no siempre sabes el vocabulario adecuado. Como tal, es fácil confundirse y encontrar opciones similares y que no funcionen. Luego, debe colocar (algunos) de ellos en el orden correcto. Esto no es trivial para alguien que migra fuera de Windows. Más aún, si no supieran las secuencias de comandos en Windows.
Nazadus
3

Si tiene problemas para recordar las opciones de alquitrán, intente usar tuberías:

  • zcat file.tar.gz | tar xvf -
  • bzcat file.tar.bz2 | tar xvf -

Reemplace tar xvcon tar tvpara ver simplemente el contenido del tarball.

Personalmente, uso los siguientes mnemónicos:

  • t, x o c para "tabular", "xtracting" o "crear", respectivamente.
  • v para enumerar todos los archivos.
  • z, j o ​​nada para tar.gz, tar.bz2 o .tar simple, respectivamente.
  • f para dar un nombre de archivo, frente al valor predeterminado de usar stdin / stdout o un dispositivo de cinta.

Aunque "j" y "bzip2" parecen no tener nada que ver entre sí, me resulta fácil recordar esta excepción.

Además, me parece curioso que Google haya reemplazado "man tar".

Logan
fuente
Debes acostumbrarte a proporcionar siempre la fopción: es solo recientemente que las distribuciones del valor predeterminado de tar son f -, el valor predeterminado histórico es f /dev/rmt0o similar. Después de todo, tar es el Tape ARchiver.
Ephemient
1
¿Qué está tabulando?
Claudiu
3

El hombre es tu amigo

man tar

madlep
fuente
2

Las tres operaciones más utilizadas :

--create -c

Crea un nuevo archivo tar.

--list -t

Listar el contenido de un archivo.

--extract -x

Extraer uno o más miembros de un archivo.


Las cinco operaciones avanzadas de alquitrán :

--append -r

Agregue nuevas entradas a un archivo que ya existe.

--update -u

Agregue copias más recientes de los miembros del archivo al final de un archivo, si existen.

--concatenate --catenate -A

Agregue uno o más archivos preexistentes al final de otro archivo.

--delete

Eliminar elementos de un archivo (no funciona en cintas).

--compare --diff -d

Compare los miembros del archivo con sus homólogos en el sistema de archivos.


Lazer
fuente
2

Siempre leo los comandos en mi mente, mientras escribo

comprimir archivo zip detallado

tar cvzf FILE

extraer archivo zip detallado ARCHIVO

tar xvzf FILE
feeela
fuente
2

Hago lo siguiente

Para crear un alquitrán:

tar czvf foo.tar.gz <files to be included>

Para descomprimir:

tar zxvf foo.tar.gz

Estos deberían ser los interruptores principales de los que debe preocuparse:

c - create
z - compress/uncompress
x - extracte
v - verbose
f - file

Puede hacer algunas cosas más elegantes como tar y untar inline mientras intenta mover archivos a través de directorios de la siguiente manera:

tar cf - <files to be copied> | (cd <target directory>; tar xvf - )
anon
fuente
1

90% del tiempo solo uso

tar -xvf file.*  

x: extraer
v: ser detallado (opcional)
f: archivo de entrada (tar, gz, bzip2, etc.)

Fácil, ¿eh? :)
Use Fileroller o Ark si no está en una consola.

ramayac
fuente
Hasta ahora, he estado usando fileroller, pero actualmente no tengo suerte porque la versión que tengo usa 1.1 Gb de memoria.
Andrew Grimm el
1

He estado usando un script de Perl llamado aunpack, parte del proyecto atool , durante muchos años. Entonces simplemente ejecuta: aunpack foo.{zip/tar.gz/tar.bz2}y hace lo correcto en función de la extensión del archivo.

El otro beneficio aunpackes que no contaminará el directorio actual con muchos archivos. Digamos que hay 20 archivos foo.zipque no están en un subdirectorio. En lugar de arrojar estos archivos en el directorio actual, aunpackcreará un foosubdirectorio y colocará todos los archivos allí.

Dave Dribin
fuente
1

Todo lo que necesita es tar x(extracto de la entrada estándar), tar c(alquitrán a la salida estándar), gzip -c(gzip de la entrada estándar a la salida estándar; -1a -9para los niveles de compresión; mismo ocurre con bzip2) y gunzip -c(gunzip de la entrada estándar a la salida estándar) - todo lo demás es tuberías.

Al alquitrán y gzip:

$ tar c * | gzip -c > out.tar.gz

Para descomprimir y descomprimir

$ gunzip -c < out.tar.gz | tar x

Si desea barras de progreso dulces, use pv que es similar a cat pero muestra barras de progreso:

$ tar c * | bzip2 -c | pv > out.tar.gz
 22.6MiB 0:00:03 [3.64MiB/s] [  <=>                           ]
$ pv in.tar.gz | bunzip2 -c | tar x
   80MiB 0:00:00 [  58MiB/s] [===============================>] 100%
porty
fuente
0

Creo que es fácil pensar en lo que quieres y no solo en algunas letras.

Para ilustrar, usaré un ejemplo de cómo extraer file.tar.gz:

Como es un archivo tar, debe usar el programa tar. Entonces son las opciones:

  1. x ya que quieres e x tratado.
  2. z si el archivo termina con .gz. (gz es después de tar en el nombre del archivo) Esta opción comprime el archivo comprimido.
  3. f para el archivo seguido del nombre del archivo.

Esto se demuestra en el siguiente ejemplo:

tar xzf file.tar.gz
Espen
fuente
0

La forma en que recuerdo es que siempre es "tar XXvf", donde están las dos X

  • x para e X tracto o c para C reate y,
  • z = gzip, j = bzip2 (gzip es más común, por lo que generalmente es z, por cualquier razón, j = bzip2 está atascado en mi cabeza).

Ocasionalmente, se encuentra con archivos comprimidos pero no alquitranados donde agrega un a cualquier tipo de compresión. por ejemplo, g un zip o b un zip2.

En todo caso, olvido el 2 y, a veces, escribo "bzip".

mmacaulay
fuente
0

También puedes crear un alias. simplemente agregue estas dos líneas a su ~/.bash_aliasesarchivo:

alias untar="tar xvf"
alias dotar="tar cvf"

entonces puedes usar untar foo.tar.gzpara extraer y dotar foo.barcomprimir. puede usar otros alias que le resulten fáciles de recordar.

foerno
fuente
0

C rea de Z ip a F ilename

tar -czf myfile.tar.gz myfile.sql

e X Tracto Z ip con F ilenamename

tar -xzf myfile.tar.gz
littledynamo
fuente