it-swarm.com.de

Auflisten des Inhalts einer TAR-Datei oder eines Verzeichnisses nur bis zu einer bestimmten Ebene

Ich frage mich, wie man den Inhalt einer TAR-Datei nur bis zu einem gewissen Grad auflistet.

Ich verstehe tar tvf mytar.tar listet alle Dateien auf, aber manchmal möchte ich nur Verzeichnisse bis zu einer bestimmten Ebene sehen.

Auf ähnliche Weise kann ich für den Befehl ls die Ebene der Unterverzeichnisse steuern, die angezeigt werden sollen. Standardmäßig werden nur die direkten Unterverzeichnisse angezeigt, jedoch nicht weiter.

51
Tim
tar tvf scripts.tar | awk -F/ '{if (NF<4) print }'


drwx------ glens/glens       0 2010-03-17 10:44 scripts/
-rwxr--r-- glens/www-data 1051 2009-07-27 10:42 scripts/my2cnf.pl
-rwxr--r-- glens/www-data  359 2009-08-14 00:01 scripts/Pastebin.sh
-rwxr--r-- glens/www-data  566 2009-07-27 10:42 scripts/critic.pl
-rwxr-xr-x glens/glens     981 2009-12-16 09:39 scripts/wiki_sys.pl
-rwxr-xr-x glens/glens    3072 2009-07-28 10:25 scripts/blacklist_update.pl
-rwxr--r-- glens/www-data 18418 2009-07-27 10:42 scripts/sysinfo.pl

Stellen Sie sicher, dass die Anzahl 3+ ist, wie viele Ebenen Sie möchten, aufgrund des/im Benutzernamen/der Gruppe. Wenn du es einfach tust

tar tf scripts.tar | awk -F/ '{if (NF<3) print }'

scripts/
scripts/my2cnf.pl
scripts/Pastebin.sh
scripts/critic.pl
scripts/wiki_sys.pl
scripts/blacklist_update.pl
scripts/sysinfo.pl

es sind nur noch zwei.

Sie könnten wahrscheinlich die Ausgabe von ls -R zu diesem awk Skript und haben den gleichen Effekt.

31
Glen Solsberry

tiefe = 1

tar --exclude="*/*" -tf file.tar


Tiefe = 2

tar --exclude="*/*/*" -tf file.tar
128
sacapeao

Es wäre schön, wenn wir den Befehl find anweisen könnten, in eine tar-Datei zu schauen, aber ich bezweifle, dass dies möglich ist.

Ich schnell und hässlich (und nicht narrensicher) wäre, die Anzahl der Verzeichnisseparatoren zu begrenzen, zum Beispiel:

 $ tar tvf myfile.tar | grep -E '^[^/]*(/[^/]*){1,2}$'

Das 2 weist an, nicht mehr als 2 Schrägstriche anzuzeigen (in meinem Fall wird einer bereits vom Benutzer-/Gruppentrennzeichen generiert) und daher höchstens eine Datei in der Tiefe anzuzeigen. Vielleicht möchten Sie es mit anderen Zahlen anstelle der 2 versuchen.

6
leonbloy

Ich stimme zu leonbloys Antwort - es gibt keine Möglichkeit, dies direkt im Tarball selbst zu tun.

Bezüglich des zweiten Teils Ihrer Frage hat ls keine Option für die maximale Tiefe. Sie können alles mit ls -R Wiederholen, aber das ist oft nicht sehr nützlich.

Sie können dies jedoch sowohl mit find als auch mit tree tun. Um beispielsweise Dateien und Verzeichnisse eine Ebene tiefer aufzulisten, können Sie dies tun

find -maxdepth 2

oder

tree -L 2

tree hat auch eine Option -d, mit der Verzeichnisse rekursiv aufgelistet werden, aber keine Dateien, die ich im Allgemeinen viel nützlicher finde als -L.

5
ire_and_curses

Eine andere Option ist archivemount . Sie mounten es und cd hinein. Dann können Sie alles damit machen, genauso wie mit anderen Dateisystemen.

$ archivemount /path/to/files.tgz /path/to/mnt/folder

Es scheint schneller als die Teermethode.

5
Sisyphus