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

192

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

Esistono metodi per farlo?

    
posta Avinash Raj 19.12.2013 - 06:46

9 risposte

208

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

tar -tf filename.tar.gz

    
risposta data Avinash Raj 19.12.2013 - 06:47
94

Puoi anche usare vim

vim filename.tar.gz
    
risposta data s.m 19.12.2013 - 06:49
36

less può anche aprire gz -compressi e non compressi tar archivi. Ti offre anche un delizioso output di stile 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
...

E poiché è less , puoi scorrerlo, cercarlo, ecc. Tuttavia fallisce miseramente con altri algoritmi di compressione (nella mia esperienza).

    
risposta data Oli 19.12.2013 - 15:00
31

Potresti usare il comando z: zcat , zless , zgrep .

Per visualizzare il contenuto di un file, utilizzare:

zcat file.gz   

Per usare qualcosa in grep:

zgrep test file.gz   

Per controllare la differenza tra i file usa:

zdiff file1.gz file2.gz

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

    
risposta data krt 30.03.2015 - 17:53
8
Il flag

tar -t elencherà i contenuti per te. Aggiungilo agli altri tuoi flag (quindi -tvfz per tar.gz , -tvfj per tar.bz2 , ecc.) E puoi sfogliare senza estrarre. Da lì puoi facilmente estrarre singoli file

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

Il grosso problema con tar è ricordando tutti gli altri flag . Pertanto, di solito faccio affidamento su 7z (del pacchetto p7zip-full ) per eseguire tutte le operazioni di archiviazione. Non dirò che è 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 bisogno della pagina man per usarlo.

C'è anche Midnight Commander ( mc ). Questo è un problema complesso per la gestione di file basati su terminali quasi grafici e con alcuni test della luce consente di navigare in entrambi gli archivi .tar.gz e .7z . Non sono sicuro di quanti altri supporti.

    
risposta data Oli 30.03.2015 - 17:50
8

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

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

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

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

#!/usr/bin/env bash

for file in "[email protected]"
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 lo script in PATH e rendilo eseguibile. È quindi possibile elencare il contenuto 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 siccome qualcuno ha menzionato quell'editor inferiore, naturalmente, emacs può anche fare questo:

    
risposta data terdon 30.03.2015 - 18:45
6

Perché non utilizzare vim per sfogliare il tuo archivio e aprire file (almeno file di testo):

vim archive.tar.gz

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

    
risposta data Sylvain Pineau 30.03.2015 - 17:43
4

Midnight Commander ( mc ) ha anche un buon visualizzatore di file compresso, anche se lo considero un po 'imbroglio dal momento che mc è un gestore di file, anche se basato su testo.

Inoltre, se tutto quello che vuoi è vedere cosa c'è dentro gli archivi compressi, potresti imparare il comando "visualizza" per ogni compressore. tar tzvf ti mostrerà il contenuto di un file tar, unzip -l lo farà per un file zip e così via.

    
risposta data roadmr 30.03.2015 - 17:52
2

Utilizzo %codice% funzionerà anche molto allo stesso modo di vim, ma senza permessi di scrittura.

    
risposta data Jeff 22.01.2018 - 14:44

Leggi altre domande sui tag