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?
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?
Antworten:
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

-t, --list Listet
den Inhalt eines Archivs auf. Argumente sind optional. Wenn angegeben, geben sie die Namen der aufzulistenden Mitglieder an.
tar -tvf xxx.tgzDies würde auch detaillierte Eigenschaften von Dateien anzeigen.
treetar -tf filename.tar.gz | tree
unzip -l/unrar -l
Sie können auch vim verwenden
vim filename.tar.gz
ex +%p foo.tar.gz.
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.
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).
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.
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.
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.
Nun, das hängt von der Datei ab. Die meisten (De-) Komprimierungsprogramme haben ein Flag, das den Inhalt eines Archivs auflistet.
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/
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)
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
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:

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

Drücken Sie die Pfeiltasten Enter, um einen Bildlauf durchzuführen und eine Datei zu öffnen.
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.
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.
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.