Wie kann ich den Inhalt der Datei tar.gz anzeigen, ohne von der Befehlszeile zu extrahieren?

244

Ich möchte den Inhalt (Liste der Dateien und Ordner) eines Archivs sehen, zum Beispiel eine tar.gzDatei, ohne sie zu extrahieren .

Gibt es Methoden, um das zu tun?

Avinash Raj
quelle

Antworten:

262

Führen Sie den folgenden Befehl im Terminal aus, um den Inhalt einer tar.gz-Datei anzuzeigen, ohne sie zu extrahieren:

tar -tf filename.tar.gz

Screenshot der Auflistung komprimierter Tarball-Dateien im Terminal

-t, --list Listet
den Inhalt eines Archivs auf. Argumente sind optional. Wenn angegeben, geben sie die Namen der aufzulistenden Mitglieder an.

Avinash Raj
quelle
1
Funktioniert all diese Beispiele, um in komprimierte Dateien zu schauen, auch mit anderen Formaten. wie zip, rar, teer etc.?
Ciasto piekarz
3
tar -tvf xxx.tgzDies würde auch detaillierte Eigenschaften von Dateien anzeigen.
Eric Wang
4
treetar -tf filename.tar.gz | tree
Leiten
Für zip / rar benutze unzip -l/unrar -l
pLumo
Wenn Sie bis zu einer bestimmten Tiefe / Ebene auflisten möchten, sehen Sie nur hier .
Holzkohlengrill
120

Sie können auch vim verwenden

vim filename.tar.gz
sm
quelle
9
Das ist fantastisch. Sie können auch den Inhalt der Dateien sehen!
Nico
1
Oder verwenden Ex - Editor: ex +%p foo.tar.gz.
Kenorb
@Nico Wie können Sie damit den Inhalt einer Datei im TGZ anzeigen?
1252748
1
Wenn Sie die Datei mit vim ( vim file.tar.gz) öffnen , heißt es "Wählen Sie eine Datei mit dem Cursor und drücken Sie ENTER". Sie tun genau das, bewegen den Cursor über eine Datei und drücken ENTER.
Nico
2
Bei einem riesigen Archiv muss man nur Geduld haben. Das Laden der Ordnerstruktur kann sehr lange dauern. :-)
Hugo H
41

lesskann auch gzkomprimierte und unkomprimierte tarArchive öffnen . Es gibt Ihnen auch eine schöne ls -lStilausgabe:

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

Und weil es so ist less, können Sie es durchblättern, durchsuchen usw. Allerdings scheitert es kläglich an anderen Komprimierungsalgorithmen (nach meiner Erfahrung).

Oli
quelle
4
Hat bei mir nicht funktioniert. Wird als Binärdatei angezeigt.
JeromeJ
2
Sind Sie sicher, dass Sie keine aliasspeziellen Optionen haben less, die Sie hier nicht anzeigen? Ich habe gerade versucht, das zu sehen, aber es hat nicht funktioniert. Ich habe keine Aliase für eingerichtet less.
Code_dredd
37

Sie könnten die z Befehl: zcat, zless, zgrep.

So zeigen Sie den Inhalt einer Datei an:

zcat file.gz   

Um etwas zu greifen, benutze:

zgrep test file.gz   

Um den Unterschied zwischen Dateien zu überprüfen, verwenden Sie:

zdiff file1.gz file2.gz

Dies sind nur einige Beispiele, es gibt viele weitere.

krt
quelle
9

tarMit der -tFlagge von wird der Inhalt für Sie aufgelistet. Fügen Sie das Ihren anderen Flags hinzu (also -tvfznach a tar.gz, -tvfjnach a tar.bz2usw.), und Sie können ohne Extrahieren browsen. Von dort aus können Sie ganz einfach einzelne Dateien extrahieren

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

Das große Problem dabei tarist, sich alle anderen Flags zu merken . Daher verlasse ich mich normalerweise auf 7z(des p7zip-fullPakets), um meine gesamte Archivierung durchzuführen. Ich behaupte nicht, dass es ganz besser ist, aber es unterstützt fast alles (ohne Komprimierungstyp angeben zu müssen) und die Argumente sind logisch.

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

Es ist sicherlich weniger in der Lage, aber Sie nicht brauchen , die man - Seite , es zu benutzen.

Es gibt auch Midnight Commander ( mc). Dies ist ein Allround-Problem für die quasi-grafische, terminalbasierte Dateiverwaltung. Mit ein paar Lichttests können Sie sowohl in .tar.gzals auch in .7zArchiven browsen . Ich bin nicht sicher, wie viele andere es unterstützt.

Oli
quelle
t-ar war früher und der Name steht in der Tat für Tape Archiver, der sequenziell kreischt und in vielen Fällen eine PIA ist. Vor allem als unvermeidlicher Doppeltar + gz ist dies einfach grausam. Jetzt auch auf 7zip umsteigen.
Frank Nocke
9

Nun, das hängt von der Datei ab. Die meisten (De-) Komprimierungsprogramme haben ein Flag, das den Inhalt eines Archivs auflistet.

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

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

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

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

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

Das sind die meisten gängigen Archivformate. Vor diesem Hintergrund könnten Sie ein kleines Skript schreiben, das den entsprechenden Befehl verwendet, abhängig von der Erweiterung der Datei, die Sie ihm geben:

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

Speichern Sie das Skript in Ihrem PATHund machen Sie es ausführbar. Sie können dann den Inhalt eines beliebigen Archivs auflisten:

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

Und da jemand diesen kleineren Editor erwähnt hat, kann Emacs dies natürlich auch:

Emacs, die den Inhalt eines Archivs anzeigen

terdon
quelle
6

Warum nicht benutzen, vimum Ihr Archiv zu durchsuchen und Dateien zu öffnen (zumindest textähnliche Dateien):

vim archive.tar.gz

Bildbeschreibung hier eingeben

Drücken Sie die Pfeiltasten Enter, um einen Bildlauf durchzuführen und eine Datei zu öffnen.

Sylvain Pineau
quelle
4

Midnight Commander ( mc) hat auch einen guten komprimierten Datei - Viewer, obwohl ich das ein bisschen Betrug betrachten , da mc ist ein Dateimanager, wenn auch ein textbasiertes ein.

Wenn Sie nur sehen möchten, was sich in komprimierten Archiven befindet, können Sie den Befehl "view" für jeden Kompressor lernen. tar tzvfzeigt Ihnen den Inhalt einer TAR-Datei, unzip -lmacht dies für eine ZIP-Datei und so weiter.

Roadmr
quelle
2

Verwenden view filename.tar.gz wird auch funktionieren. Ähnlich wie vim, jedoch ohne Schreibrechte.

Jeff
quelle
2

lesspipeist ein Shell-Skript, das standardmäßig als Teil des lessPakets installiert wird und den Inhalt eines tar.gzArchivs sowie eine Reihe anderer gängiger Archivdateiformate auflisten kann.

$ 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 wird vom lessBefehl ( siehe Olis Antwort ) als Eingabe-Präprozessor aufgerufen, wenn die $LESSOPENUmgebungsvariable entsprechend eingestellt ist.

Wenn Sie sich abenteuerlustig fühlen, werfen Sie einen vi /usr/bin/lesspipeBlick darauf, welche Befehle verwendet werden. Bei Dateien, die mit der tar.gzErweiterung übereinstimmen , sehen wir, dass sie tar tzvfunter der Haube zusammen mit der --force-localOption zum Deaktivieren einer dunklen Funktion verwendet werden tar, die ansonsten Doppelpunkte im Dateinamen mit einem Befehl zur Verwendung eines Remote-Bandlaufwerks verwechseln würde :

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

Beachten Sie, dass es, da es hauptsächlich als Präprozessor für entwickelt wurde less, nichts ausgibt, wenn es den Dateityp nicht erkennt. Ich habe festgestellt, dass einige .tar.gzDateien, die ich heruntergeladen habe, nicht funktionieren, da sie trotz des Dateinamens keine gzip-Komprimierung verwenden.

anjsimmo
quelle
0

Wenn Sie den Inhalt einer bestimmten Datei in einem Archiv anzeigen möchten, ohne das Archiv zu extrahieren oder auf die Festplatte zu schreiben, verwenden Sie das Flag -O (Großbuchstabe o), um anstelle einer Datei in stdout zu schreiben.

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

Stellen Sie sicher, dass das O vor dem f steht, da sonst versucht wird, das O als Dateinamen zu analysieren.

Mobus Dorphin
quelle