Anti bomba tar.gz

¿A quién no le ha ocurrido? Descargas un fichero.tar.gz en $HOME, invocas el conjuro para desempaquetar y descomprimir:

$ tar -xvzf fichero.tar.gz

Y cuando observas el resultado te das cuenta que el muy %$E/&% se ha descomprimido SIN crear un subdirectorio, o sea, ha dejado todo tu $HOME lleno de ficheros. Es lo que se conoce como una bomba tar.

Bien, el siguiente comando atb (anti-tar-bomb), encontrado en commandlinefu.com, analiza el tar.gz (o .bz2 o .tgz) ANTES de descomprimirlo. Si resulta que se trata de una bomba tar, crea un directorio con el mismo nombre X que el fichero X.tar.gz y luego lo descomprime en X. Magia!

atb() {shopt -s extglob ; l=$(tar tf $1); if [ $(echo "$l" | wc -l) -eq $(echo "$l" | grep $(echo "$l" | head -n1) | wc -l) ]; then tar xf $1; else mkdir ${1%.t@(ar.gz|ar.bz2|gz|bz|ar)} && tar xf $1 -C ${1%.t@(ar.gz|ar.bz2|gz|bz|ar)}; fi ; shopt -u extglob}

8 comentarios en «Anti bomba tar.gz»

  1. O también puedes descomprimir desde el entorno gráfico. Ubuntu (gnome) SIEMPRE te crea el directorio.

    Eso sí, soy consciente de que a veces no tenemos entorno gráfico, pero en mi caso eso pasa el 1% del tiempo.

  2. Es lo que (increíblemente) hacía (y sigue haciendo) la versión 1.5 de Joomla. Ahora por suerte, con la 1.6 ya hay el empaquetado con tar+gz, y ya lo hacen bien.

    Es un programa muy específico pero que va bien tener en el botiquín por si acaso!

  3. Contra las bombas tar hay una herramienta muy útil, pero no es el software, sino el sentido común.

    En primer lugar, podemos asegurarnos de que nunca polucionaremos el directorio actual si siempre creamos un subdirectorio y descomprimimos allí. Es una solución análoga a la de arpia49. Si el tar era una bomba, nos alegraremos de haber usado un subdirectorio. Si no (si nos crea él un sub-subdirectorio), la solución es fácil (mover el sub-subdirectorio creado al dir padre, y eliminar el subdirectorio que hemos creado).

    En segundo lugar, un fichero tar siempre hay que inspeccionarlo con tar -t antes de descomprimirlo. Ejemplo:

    $ ls *tar.gz
    fichero.tar.gz
    $ tar -ztvf fichero.tar.gz
    subdir/fichero1
    subdir/fichero2
    $ tar -zxvf fichero.tar.gz
    subdir/fichero1
    subdir/fichero2

    Al usar -t en vez de -x, se nos muestra en pantalla el contenido del tar, como si lo fuesemos a descomprimir, pero sin hacerlo. Vemos que descomprime todo en «subdir», así que lo descomprimimos (con -x) sin miedo.

  4. El Unarchiver para Mac OSX tiene una opción que hace automáticamente lo que dicta el sentido común: mira dentro del archivo y si hay más de una carpeta o archivos, descomprime a una carpeta. Si sólo hay una carpeta, descomprime sin crear una nueva. No creo que fuese muy difícil incluir esta habilidad en tar o al menos el descompresor del escritorio Gnome. Crear una carpeta SIEMPRE no es muy sensato. (El Unarchiver incluye otra opción más que razonable también: borrar el archivo tar después de descomprimir.)

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.