¿Cómo puedo ver el contenido del archivo tar.gz sin extraerlo desde la línea de comandos?

194

Quiero ver el contenido (lista de archivos y carpetas) de un archivo, por ejemplo, un archivo tar.gz sin extraerlo .

¿Hay algún método para hacer eso?

    
pregunta Avinash Raj 19.12.2013 - 06:46

9 respuestas

210

Ejecute el siguiente comando en la terminal para ver el contenido de un archivo tar.gz sin extraerlo:

tar -tf filename.tar.gz

    
respondido por el Avinash Raj 19.12.2013 - 06:47
94

También puedes usar vim

vim filename.tar.gz
    
respondido por el s.m 19.12.2013 - 06:49
36

less también puede abrir gz -compressed y descomprimido tar archives. También te ofrece un precioso resultado de estilo ls -l :

$ less ~/src/compiz_0.9.7.8-0ubuntu1.6.debian.tar.gz
drwxrwxr-x 0/0               0 2012-09-21 11:41 debian/
drwxrwxr-x 0/0               0 2012-08-09 13:32 debian/source/
-rw-rw-r-- 0/0              12 2012-08-09 13:32 debian/source/format
-rw-rw-r-- 0/0              25 2012-08-09 13:32 debian/libdecoration0-dev.docs
-rw-rw-r-- 0/0              25 2012-08-09 13:32 debian/compiz-dev.docs
-rw-rw-r-- 0/0             347 2012-08-09 13:32 debian/compiz-core.install
-rw-rw-r-- 0/0             125 2012-08-09 13:32 debian/libdecoration0-dev.install
...

Y como es less , puede desplazarse por él, buscarlo, etc. Sin embargo, falla miserablemente con otros algoritmos de compresión (en mi experiencia).

    
respondido por el Oli 19.12.2013 - 15:00
31

Puedes usar el comando z: zcat , zless , zgrep .

Para ver el uso de contenido de un archivo:

zcat file.gz   

Para usar algo grep:

zgrep test file.gz   

Para verificar la diferencia entre los archivos, use:

zdiff file1.gz file2.gz

Estos son solo algunos ejemplos, hay muchos más.

    
respondido por el krt 30.03.2015 - 17:53
8

tar 's -t marcará los contenidos por ti. Agregue eso a sus otros indicadores (por lo tanto, -tvfz para un tar.gz , -tvfj para un tar.bz2 , etc.) y puede navegar sin extraer. Desde allí, puedes extraer archivos individuales con bastante facilidad

tar -xvfz mybackup.tar.gz path/to/file

El gran problema con tar es recordar todas las otras banderas . Así que generalmente confío en 7z (del paquete p7zip-full ) para hacer todo mi archivado. No afirmaré que sea completamente mejor, pero admite casi todo (sin tener que especificar el tipo de compresión) y los argumentos son lógicos.

7z l archive.ext
7z e archive.ext path/to/file

Ciertamente es menos capaz, pero no necesitas la página man para usarlo.

También hay Midnight Commander ( mc ). Esta es una aplicación completa para la administración de archivos cuasi-gráfica basada en terminales y con algunas pruebas ligeras, solo te permite navegar en los archivos .tar.gz y .7z . No estoy seguro de cuántos otros admite.

    
respondido por el Oli 30.03.2015 - 17:50
8

Bueno, eso depende del archivo. La mayoría de los programas de (de) compresión tienen una bandera que enumera los contenidos de un archivo.

  1. tar / tar.gz / tgz / tar.xz / tar.bz2 / tbz files

    $ tar tf foo.tgz 
    dir1/
    dir1/subdir1/
    dir1/subdir1/file
    dir1/subdir2/
    dir1/subdir2/file
    dir2/
    
  2. zip files

    $ zip -sf foo.zip 
    Archive contains:
      dir1/
      dir2/
      dir1/subdir1/
      dir1/subdir1/file
      dir1/subdir2/
      dir1/subdir2/file
    Total 6 entries (0 bytes)
    
  3. 7zip files

    $ 7z l foo.7z 
    
    7-Zip [64] 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
    p7zip Version 9.20 (locale=en_US.utf8,Utf16=on,HugeFiles=on,4 CPUs)
    
    Listing archive: foo.7z
    
    --
    Path = foo.7z
    Type = 7z
    Solid = -
    Blocks = 0
    Physical Size = 168
    Headers Size = 168
    
       Date      Time    Attr         Size   Compressed  Name
    ------------------- ----- ------------ ------------  ------------------------
    2015-03-30 19:00:07 ....A            0            0  dir1/subdir1/file
    2015-03-30 19:00:07 ....A            0            0  dir1/subdir2/file
    2015-03-30 19:07:32 D....            0            0  dir2
    2015-03-30 19:00:07 D....            0            0  dir1/subdir2
    2015-03-30 19:00:07 D....            0            0  dir1/subdir1
    2015-03-30 19:00:06 D....            0            0  dir1
    ------------------- ----- ------------ ------------  ------------------------
                                         0            0  2 files, 4 folders
    
  4. rar files

     $ rar v foo.rar 
    
    RAR 4.20   Copyright (c) 1993-2012 Alexander Roshal   9 Jun 2012
    Trial version             Type RAR -? for help
    
    Archive foo.rar
    
    Pathname/Comment
                      Size   Packed Ratio  Date   Time     Attr      CRC   Meth Ver
    -------------------------------------------------------------------------------
     dir1/subdir1/file
                         0        8   0% 30-03-15 19:00 -rw-r--r-- 00000000 m3b 2.9
     dir1/subdir2/file
                         0        8   0% 30-03-15 19:00 -rw-r--r-- 00000000 m3b 2.9
     dir1/subdir1
                         0        0   0% 30-03-15 19:00 drwxr-xr-x 00000000 m0  2.0
     dir1/subdir2
                         0        0   0% 30-03-15 19:00 drwxr-xr-x 00000000 m0  2.0
     dir1
                         0        0   0% 30-03-15 19:00 drwxr-xr-x 00000000 m0  2.0
     dir2
                         0        0   0% 30-03-15 19:07 drwxr-xr-x 00000000 m0  2.0
    -------------------------------------------------------------------------------
        6                0       16   0%
    

Esa es la mayoría de los formatos de archivo más populares. Con todo esto en mente, podría escribir un pequeño script que use el comando apropiado dependiendo de la extensión del archivo que le proporcione:

#!/usr/bin/env bash

for file in "$@"
do
    printf "\n-----\nArchive '%s'\n-----\n" "$file"
    ## Get the file's extension
    ext=${file##*.}
    ## Special case for compressed tar files. They sometimes
    ## have extensions like tar.bz2 or tar.gz etc.
    [[ "$(basename "$file" ."$ext")" =~ \.tar$ ]] && ext="tgz"

    case $ext in
        7z)
            type 7z >/dev/null 2>&1 && 7z l "$file" || 
            echo "ERROR: no 7z program installed"
            ;;
        tar|tbz|tgz)
            type tar >/dev/null 2>&1 && tar tf "$file"|| 
            echo "ERROR: no tar program installed"
            ;;
        rar)
            type rar >/dev/null 2>&1 && rar v "$file"|| 
            echo "ERROR: no rar program installed"
            ;;
        zip)
            type zip >/dev/null 2>&1 && zip -sf "$file"|| 
            echo "ERROR: no zip program installed"
            ;;
        *)
            echo "Unknown extension: '$ext', skipping..."
            ;;
    esac
done

Guarde ese script en su PATH y hágalo ejecutable. A continuación, puede enumerar los contenidos de cualquier archivo:

$ list_archive.sh foo.rar foo.tar.bz foo.tar.gz foo.tbz foo.zip

-----
Archive 'foo.rar'
-----

RAR 4.20   Copyright (c) 1993-2012 Alexander Roshal   9 Jun 2012
Trial version             Type RAR -? for help

Archive foo.rar

Pathname/Comment
                  Size   Packed Ratio  Date   Time     Attr      CRC   Meth Ver
-------------------------------------------------------------------------------
 dir1/subdir1/file
                     0        8   0% 30-03-15 19:00 -rw-r--r-- 00000000 m3b 2.9
 dir1/file
                     0        8   0% 30-03-15 19:29 -rw-r--r-- 00000000 m3b 2.9
 dir1/subdir1
                     0        0   0% 30-03-15 19:00 drwxr-xr-x 00000000 m0  2.0
 dir1
                     0        0   0% 30-03-15 19:29 drwxr-xr-x 00000000 m0  2.0
 dir2
                     0        0   0% 30-03-15 19:07 drwxr-xr-x 00000000 m0  2.0
-------------------------------------------------------------------------------
    5                0       16   0%


-----
Archive 'foo.tar.bz'
-----
dir1/
dir1/subdir1/
dir1/subdir1/file
dir1/file
dir2/

-----
Archive 'foo.tar.gz'
-----
dir1/
dir1/subdir1/
dir1/subdir1/file
dir1/file
dir2/

-----
Archive 'foo.tbz'
-----
dir1/
dir1/subdir1/
dir1/subdir1/file
dir1/file
dir2/

-----
Archive 'foo.zip'
-----
Archive contains:
  dir1/
  dir1/subdir1/
  dir1/subdir1/file
  dir1/file
  dir2/
Total 5 entries (0 bytes)

Y como alguien mencionó ese editor menor, naturalmente, emacs también puede hacer esto:

    
respondido por el terdon 30.03.2015 - 18:45
6

¿Por qué no usar vim para navegar por su archivo y abrir archivos (al menos archivos de texto):

vim archive.tar.gz

Presione las teclas de flecha para desplazarse y Ingresar para abrir un archivo.

    
respondido por el Sylvain Pineau 30.03.2015 - 17:43
4

Midnight Commander ( mc ) también tiene un buen visor de archivos comprimido, aunque considero que es un poco de engaño ya que mc es un administrador de archivos, aunque basado en texto.

Además, si todo lo que quiere es ver qué hay dentro de los archivos comprimidos, podría aprender el comando "ver" para cada compresor. tar tzvf le mostrará el contenido de un archivo tar, unzip -l lo hará para un archivo zip, y así sucesivamente.

    
respondido por el roadmr 30.03.2015 - 17:52
2

Uso %código% también funcionará de la misma manera que vim, pero sin permisos de escritura.

    
respondido por el Jeff 22.01.2018 - 14:44

Lea otras preguntas en las etiquetas