tar -xf archive.tar.gz extrae tar, tar.gz, tar.bz2, tar.xz y tar.zst — el tar moderno detecta la compresión por el contenido del archivo, sin necesidad de ningún flag. El otro hábito que te ahorra un desastre es mirar qué hay dentro de un archivo desconocido antes de extraerlo, porque uno sin una carpeta raíz común esparce todo por tu directorio actual.
1. Primero mira qué hay dentro
$ clai muéstrame qué hay en este archivo sin extraerlo→ tar -tf arch.tar.gz | head -4d/d/b/d/b/two-copy.txtd/a/
-t lista el contenido en vez de extraerlo. Si todas las rutas comparten una misma carpeta raíz, el archivo es prolijo. Si la lista muestra rutas como ./file1, ./file2 sin carpeta común, extraerlo esparcirá todo por tu directorio actual.
2. Extraer sin pensar en la compresión
$ clai extrae este archivo→ tar -xf arch.tar.gz
El tar moderno de GNU detecta gzip, bzip2, xz y zstd por el contenido del archivo. Los flags z, j y J solo importan en versiones viejas de tar y al crear un archivo. Un solo comando cubre todos los formatos basados en tar.
3. Extraer en un directorio aparte
$ clai extrae el archivo en una carpeta llamada out→ mkdir -p out && tar -xf arch.tar.gz -C out
-C cambia de directorio antes de extraer. Es también la defensa contra la «bomba de archivo» de la sección 1: incluso sin carpeta común, el desorden termina en out, no debajo de tus pies.
4. Sacar un solo archivo
$ clai extrae solo el archivo d/a/three.txt del comprimido→ tar -xf arch.tar.gz d/a/three.txt
Indica la ruta exactamente como aparece en la salida de tar -tf. No la adivines — cópiala del listado.
5. Otros formatos
$ clai extrae este zip en una carpeta llamada out→ unzip -d out archive.zip
unzip recibe el directorio de salida con -d, no con -C. Para 7z es 7z x archive.7z -oout — sin espacio después de -o, o lo interpretará como nombre de archivo. Cada herramienta inventó su propio flag para lo mismo.
6. Buscar dentro sin extraer
$ clai busca la palabra error en el archivo sin extraerlo→ tar -xzOf logs.tar.gz | grep -n 'error' | head
-O envía el contenido de los archivos a stdout en vez de escribirlo en disco. Para un archivo de logs de varios gigabytes, esa es la diferencia entre hacerlo ya mismo y tener que buscar antes 10 GB de espacio libre.
Trampas habituales
- El flag
ftiene que ir al final del grupo.tar -xfzintenta usarzcomo nombre de archivo. Escribetar -xzfo simplementetar -xf. .tar.gzy.tgzson lo mismo. Igual que.tar.bz2y.tbz2. La extensión no decide nada — tar mira el contenido.- Un archivo con rutas absolutas es peligroso. Si
tar -tfmuestra rutas que empiezan con/, extraerlo puede sobrescribir archivos del sistema. Extrae ese tipo de archivo solo con-Cen un directorio propio, después de revisar el listado.
Preguntas relacionadas
¿Cómo veo el tamaño de los archivos dentro de un archivo comprimido? tar -tvf archive.tar.gz — v añade permisos, propietario, tamaño y fecha.
¿Por qué unzip arruina los nombres con caracteres no ASCII? La codificación de nombres en zip nunca se estandarizó. unzip -O CP866 arregla archivos que vienen de Windows con nombres en cirílico.
¿Cómo extraigo varios archivos a la vez? for f in *.tar.gz; do tar -xf "$f" -C "${f%.tar.gz}"; done, después de crear los directorios.
Ver también
- Comprime este directorio y súbelo a S3
- Limpia logs y backups viejos con una frase
- Buscar y reemplazar en todos los archivos de un proyecto
CliAI escribe el comando de extracción correcto para cualquier archivo que le pases, con todos sus flags. Instálalo en una línea.