Come posso visualizzare il contenuto del file tar.gz senza estrarlo dalla riga di comando?


246

Voglio vedere il contenuto (elenco di file e cartelle) di un archivio, ad esempio un tar.gzfile senza estrarlo .

Ci sono metodi per farlo?

Risposte:


265

Esegui il comando seguente nel terminale per vedere il contenuto di un file tar.gz senza estrarlo:

tar -tf filename.tar.gz

screenshot dell'elenco dei file compressi tarball nel terminale

-t, --list
Elenca i contenuti di un archivio. Gli argomenti sono facoltativi. Quando dati, specificano i nomi dei membri da elencare.


1
tutti questi esempi per guardare all'interno di file compressi funzionano anche su altri tipi di formato. come zip, rar, tar ecc.?
Ciasto piekarz,

3
tar -tvf xxx.tgzquesto mostrerebbe anche le proprietà di dettaglio dei file.
Eric Wang,

4
pipe treeper vedere una vista ad alberotar -tf filename.tar.gz | tree
blockloop

Per zip / rar usa unzip -l/unrar -l
pLumo

Se si desidera elencare fino a una profondità / livello specifici , vedere solo qui .
holzkohlengrill,

120

Puoi anche usare vim

vim filename.tar.gz

9
Questo e spettacolare. Puoi anche vedere il contenuto dei file!
Nico,

1
Oppure utilizzare editor di Es: ex +%p foo.tar.gz.
Kenorb,

@Nico Come lo usi per vedere il contenuto di un file all'interno di tgz?
1252748,

1
Quando apri de file con vim ( vim file.tar.gz), dice "Seleziona un file con cursore e premi INVIO". Fai proprio questo, sposta il cursore su un file e premi INVIO.
Nico,

2
Con un enorme archivio devi solo essere paziente. Può essere molto lungo caricare la struttura delle cartelle. :-)
Hugo H,

41

lesspuò anche aprire archivi gznon compressi e non compressi tar. Ti dà anche un ls -loutput di stile delizioso :

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

E poiché è lesspossibile scorrere, cercare, ecc. Tuttavia, fallisce miseramente con altri algoritmi di compressione (nella mia esperienza).


5
Non ha funzionato per me. Visualizzato come file binario.
JeromeJ,

2
Sei sicuro di non avere aliasopzioni speciali per lessquello che non stai mostrando qui? Ho appena provato a vederlo, ma non ha funzionato. Non ho alcun alias impostato per less.
code_dredd,

37

È possibile utilizzare il comando z: zcat, zless, zgrep.

Per visualizzare un contenuto di file utilizzare:

zcat file.gz   

Per grep usare qualcosa:

zgrep test file.gz   

Per verificare la differenza tra i file utilizzare:

zdiff file1.gz file2.gz

Questi sono solo alcuni esempi, ce ne sono molti altri.


9

tarla -tbandiera elencherà i contenuti per te. Aggiungilo agli altri flag (quindi -tvfzper a tar.gz, -tvfjper a tar.bz2, ecc.) E puoi navigare senza estrarre. Da lì puoi estrarre singoli file abbastanza facilmente

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

Il grosso problema tarè ricordare tutte le altre bandiere . Quindi di solito mi affido 7z(del p7zip-fullpacchetto) per fare tutta la mia archiviazione. Non pretendo che sia del tutto migliore ma supporta quasi tutto (senza dover specificare il tipo di compressione) e gli argomenti sono logici.

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

È sicuramente meno capace, ma non è necessaria la pagina man per usarla.

C'è anche Midnight Commander ( mc). Questo è un vero e proprio tuttofare per la gestione quasi grafica di file basati su terminali e con alcuni test leggeri ti consente di navigare in entrambi .tar.gze negli .7zarchivi. Non sono sicuro di quanti altri supporti.


t-ar era un tempo e il nome in realtà significa archiviatore di nastri , che urla in sequenza ed è in molti casi un PIA. Soprattutto come l'inevitabile doppio tar + gz questo è solo crudele. Passando anche a 7zip ora.
Frank Nocke,

9

Bene, questo dipende dal file. La maggior parte dei (de) programmi di compressione ha un flag che elenca i contenuti di un archivio.

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

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

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

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

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

Questo è la maggior parte dei formati di archivio più popolari. Con tutto questo in mente, potresti scrivere un piccolo script che utilizza il comando appropriato a seconda dell'estensione del file che gli dai:

#!/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

Salva quello script nel tuo PATHe rendilo eseguibile. È quindi possibile elencare i contenuti di qualsiasi archivio:

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

E dal momento che qualcuno ha detto che l'editor minore, naturalmente, anche emacs può fare questo:

emacs mostra i contenuti di un archivio


6

Perché non usare vimper sfogliare il tuo archivio e aprire file (almeno file di tipo testuale):

vim archive.tar.gz

inserisci qui la descrizione dell'immagine

Premere i tasti freccia per scorrere e Enterper aprire un file.


4

Midnight Commander ( mc) ha anche un buon visualizzatore di file compressi, anche se lo considero un po 'imbroglione poiché mc è un file manager, anche se basato su testo.

Inoltre, se tutto ciò che vuoi è vedere cosa c'è negli archivi compressi, puoi imparare il comando "view" per ogni compressore. tar tzvfti mostrerà il contenuto di un file tar, unzip -llo farà per un file zip e così via.


2

Anche l'uso view filename.tar.gz funzionerà. allo stesso modo di vim, ma senza permessi di scrittura.


2

lesspipeè uno script di shell installato di default come parte del lesspacchetto che può elencare il contenuto di un tar.gzarchivio, nonché una gamma di altri formati di file di archivio comuni.

$ 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

Viene chiamato dal lesscomando ( vedere la risposta di Oli ) come preprocessore di input se la $LESSOPENvariabile di ambiente è impostata in modo appropriato.

Se ti senti avventuroso, prova vi /usr/bin/lesspipea vedere quali comandi utilizza. Per i file che corrispondono tar.gzall'estensione, possiamo vedere che utilizza tar tzvfsotto il cofano insieme --force-localall'opzione per disabilitare una funzione oscura tarche altrimenti confonderebbe i due punti nel nome del file con un comando per utilizzare un'unità nastro remota:

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

Si noti che poiché è principalmente progettato come preprocessore less, non produrrà nulla se non riconosce il tipo di file. Ho notato che alcuni .tar.gzfile che ho scaricato non funzionavano perché in realtà non utilizzavano la compressione gzip nonostante il nome del file.


0

Se si desidera visualizzare il contenuto di un file specifico all'interno di un archivio senza estrarre l'archivio o scrivere su disco in alcun modo, utilizzare il flag -O (maiuscolo o) per scrivere su stdout anziché su un file.

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

Assicurati che la O preceda la f o proverà ad analizzare la O come nome di file.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.