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

246

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

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

Avinash Raj
fuente

Respuestas:

265

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

tar -tf filename.tar.gz

captura de pantalla de la lista de archivos comprimidos de tarball en la terminal

-t, --list
Lista el contenido de un archivo. Los argumentos son opcionales. Cuando se proporcionan, especifican los nombres de los miembros a enumerar.

Avinash Raj
fuente
1
todos estos ejemplos para mirar dentro del archivo comprimido también funcionan en otros tipos de formato. como zip, rar, alquitrán, etc.
Ciasto piekarz
3
tar -tvf xxx.tgzesto también mostraría propiedades detalladas de los archivos.
Eric Wang
44
canalizar treea ver una vista de árboltar -tf filename.tar.gz | tree
blockloop
Para zip / rar use unzip -l/unrar -l
pLumo
Si desea enumerar hasta una profundidad / nivel específico , solo vea aquí .
holzkohlengrill
120

También puedes usar vim

vim filename.tar.gz
sm
fuente
99
Esto es asombroso ¡También puedes ver el contenido de los archivos!
Nico
1
O utilizar el editor Ex: ex +%p foo.tar.gz.
kenorb
@Nico ¿Cómo usas esto para ver el contenido de un archivo dentro del tgz?
1252748
1
Cuando abre el archivo con vim ( vim file.tar.gz) dice "Seleccione un archivo con el cursor y presione ENTER". Simplemente haga eso, mueva el cursor sobre un archivo y presione ENTER.
Nico
2
Con un archivo enorme solo tienes que ser paciente. Puede ser muy largo cargar la estructura de carpetas. :-)
Hugo H
41

lessTambién puede abrir archivos gzcomprimidos y sin comprimir tar. También te da una ls -lsalida de estilo encantadora :

$ 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 debido a que es así less, puede desplazarse por él, buscarlo, etc. Sin embargo, falla miserablemente con otros algoritmos de compresión (en mi experiencia).

Oli
fuente
55
No funciono para mi. Se muestra como un archivo binario.
JeromeJ
2
¿Estás seguro de que no tienes aliasopciones especiales para lesseso que no estás mostrando aquí? Solo intenté ver eso, pero no funcionó. No tengo ningún alias configurado less.
code_dredd
37

Se podría utilizar el comando z: zcat, zless, zgrep.

Para ver el contenido de un archivo, use:

zcat file.gz   

Para grep algo use:

zgrep test file.gz   

Para verificar la diferencia entre archivos, use:

zdiff file1.gz file2.gz

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

krt
fuente
9

tarLa -tbandera de la lista enumerará los contenidos por usted. Agregue eso a sus otras banderas (así que -tvfzpara a tar.gz, -tvfjpara a tar.bz2, etc.) y puede navegar sin extraer. Desde allí, puede extraer archivos individuales con bastante facilidad

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

El gran problema con tares recordar todas las otras banderas . Por lo tanto, generalmente confío en 7z(del p7zip-fullpaquete) para hacer todo mi archivo. No afirmaré que es 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 necesita la página de manual para usarlo.

También hay Midnight Commander ( mc). Este es un rudo completo para la gestión de archivos basada en terminales casi gráficas y con algunas pruebas ligeras simplemente te permite navegar tanto en archivos .tar.gzcomo en .7zarchivos. No estoy seguro de cuántos otros soporta.

Oli
fuente
solía ser t-ar y el nombre en realidad significa cinta archivadora, que grita secuencialmente y en muchos casos es un PIA. Especialmente como el inevitable doble tar + gz esto es simplemente cruel. También se está moviendo a 7zip ahora.
Frank Nocke
9

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

  1. tar/ tar.gz/ tgz/ tar.xz/ tar.bz2/ tbzarchivos

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

    $ 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 archivos

    $ 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 archivos

     $ 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ías escribir un pequeño script que use el comando apropiado dependiendo de la extensión del archivo que le des:

#!/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 PATHarchivo y hágalo ejecutable. Luego puede enumerar el contenido 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ó a ese editor menor, naturalmente, emacs también puede hacer esto:

emacs que muestra el contenido de un archivo

terdon
fuente
6

¿Por qué no utilizar vimpara explorar su archivo y abrir archivos (al menos archivos de texto):

vim archive.tar.gz

ingrese la descripción de la imagen aquí

Presione las teclas de flecha para desplazarse y Enterabrir un archivo.

Sylvain Pineau
fuente
4

Midnight Commander ( mc) también tiene un buen visor de archivos comprimido, aunque considero que esto es un poco tramposo ya que mc es un administrador de archivos, aunque está basado en texto.

Además, si todo lo que quiere es ver lo que hay dentro de los archivos comprimidos, puede aprender el comando "ver" para cada compresor. tar tzvfle mostrará el contenido de un archivo tar, unzip -llo hará para un archivo zip, y así sucesivamente.

roadmr
fuente
2

Usar view filename.tar.gz también funcionará. de la misma manera que lo hace vim, pero sin permisos de escritura.

Jeff
fuente
2

lesspipees un script de shell instalado de manera predeterminada como parte del lesspaquete que puede enumerar el contenido de un tar.gzarchivo, así como una gama de otros formatos de archivo de archivo comunes.

$ lesspipe example.tar.gz
drwxrwxr-x ubuntu/ubuntu     0 2018-11-16 05:32 example/
-rw-rw-r-- ubuntu/ubuntu     7 2018-11-16 05:32 example/ask.txt
-rw-rw-r-- ubuntu/ubuntu     7 2018-11-16 05:32 example/ubuntu.txt

Es invocado por el lesscomando ( vea la respuesta de Oli ) como un preprocesador de entrada si la $LESSOPENvariable de entorno está configurada adecuadamente.

Si se siente aventurero, eche un vi /usr/bin/lesspipevistazo para ver qué comandos usa. Para los archivos que coinciden con la tar.gzextensión, podemos ver que se usa tar tzvfdebajo del capó junto con la --force-localopción de deshabilitar una característica oscura tarque de lo contrario confundiría los dos puntos en el nombre de archivo con un comando para usar una unidad de cinta remota:

*.tar.gz|*.tgz|*.tar.z|*.tar.dz)
        tar tzvf "$1" --force-local

Tenga en cuenta que debido a que está diseñado principalmente como un preprocesador para less, no generará nada si no reconoce el tipo de archivo. Noté que algunos .tar.gzarchivos que descargué no funcionarían porque en realidad no usaban compresión gzip a pesar del nombre del archivo.

anjsimmo
fuente
0

Si desea ver el contenido de un archivo específico dentro de un archivo sin extraer el archivo o escribir en el disco de ninguna manera, use el indicador -O (mayúscula o) para escribir en stdout en lugar de un archivo.

tar -Oxvf gerald.tar.gz /path/to/sandra.txt | less

Asegúrese de que la O aparezca antes de f o intentará analizar la O como un nombre de archivo.

Mobus Dorphin
fuente