Ich möchte den Inhalt (Liste der Dateien und Ordner) eines Archivs sehen, zum Beispiel eine tar.gz
Datei, 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.gz
Datei, 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.tgz
Dies würde auch detaillierte Eigenschaften von Dateien anzeigen.
tree
tar -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.
less
kann auch gz
komprimierte und unkomprimierte tar
Archive öffnen . Es gibt Ihnen auch eine schöne ls -l
Stilausgabe:
$ 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).
alias
speziellen 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.
tar
Mit der -t
Flagge von wird der Inhalt für Sie aufgelistet. Fügen Sie das Ihren anderen Flags hinzu (also -tvfz
nach a tar.gz
, -tvfj
nach a tar.bz2
usw.), 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 tar
ist, sich alle anderen Flags zu merken . Daher verlasse ich mich normalerweise auf 7z
(des p7zip-full
Pakets), 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.gz
als auch in .7z
Archiven 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
/ tbz
Dateien
$ 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 PATH
und 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, vim
um 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 tzvf
zeigt Ihnen den Inhalt einer TAR-Datei, unzip -l
macht dies für eine ZIP-Datei und so weiter.
lesspipe
ist ein Shell-Skript, das standardmäßig als Teil des less
Pakets installiert wird und den Inhalt eines tar.gz
Archivs 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 less
Befehl ( siehe Olis Antwort ) als Eingabe-Präprozessor aufgerufen, wenn die $LESSOPEN
Umgebungsvariable entsprechend eingestellt ist.
Wenn Sie sich abenteuerlustig fühlen, werfen Sie einen vi /usr/bin/lesspipe
Blick darauf, welche Befehle verwendet werden. Bei Dateien, die mit der tar.gz
Erweiterung übereinstimmen , sehen wir, dass sie tar tzvf
unter der Haube zusammen mit der --force-local
Option 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.gz
Dateien, 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.