Eintrag den Inhalt einer tar-Datei oder ein Verzeichnis nur bis zu einem gewissen Grad

StackOverflow https://stackoverflow.com/questions/2700306

  •  01-10-2019
  •  | 
  •  

Frage

Ich frage mich, wie Sie den Inhalt einer tar-Datei auf einer bestimmten Ebene nur nach unten zur Liste?

Ich verstehe tar tvf mytar.tar alle Dateien auflistet, aber manchmal würde ich nur gerne Verzeichnisse sehen, bis zu einem gewissen Grad.

In ähnlicher Weise für den Befehl ls, wie steuere ich die Verzeichnisse eine Ebene, die angezeigt wird? Standardmäßig wird es zeigt nur die direkten Unterverzeichnisse, aber nicht weiter gehen.

War es hilfreich?

Lösung

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, zu beachten Sie, dass die Zahl 3+ jedoch viele Ebenen, die Sie wollen, weil der / den Benutzernamen / Gruppe. Wenn Sie gerade tun

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 ist nur noch zwei.

Sie könnten wahrscheinlich die Ausgabe des ls -R zu diesem awk Skript, und die gleiche Wirkung hat.

Andere Tipps

Tiefe = 1

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


Tiefe = 2

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

Es wäre schön, wenn wir den find Befehl in einer TAR-Datei suchen sagen könnte, aber ich bezweifle, das ist möglich.

ich schnell und hässlich (und nicht narrensicher) Art und Weise der Anzahl der Verzeichnistrenn, zum Beispiel zu begrenzen wäre:

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

Die 2 sagt nicht mehr als 2 Schrägstriche angezeigt wird (in meinem Fall ist bereits durch den Benutzer / Gruppentrenn erzeugt) und somit höchstens eine Datei in der Tiefe angezeigt werden soll. Sie könnten mit einer unterschiedlichen Anzahl an Stelle des 2 ausprobieren möchten.

Eine weitere Option ist archivemount . Sie montieren und cd hinein. Dann können Sie damit machen alles genauso wie bei anderen Dateisystem.

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

Es scheint, schneller als die Teer-Methode.

Ich bin mit leonbloy Antwort - es gibt keine Möglichkeit, dies im Tarball selbst ohne weiteres zu tun

.

In Bezug auf den zweiten Teil Ihrer Frage, ls nicht über eine maximale Tiefe Option. Sie können Rekursion alles mit ls -R, aber das ist oft nicht sehr nützlich.

Allerdings können Sie dies sowohl mit find und tree. Zum Beispiel zur Liste Dateien und Verzeichnisse eine Ebene tiefer, können Sie

find -maxdepth 2

oder

tree -L 2

tree hat auch eine -d Option, die rekursiv Verzeichnisse Verzeichnisse, nicht aber Dateien, die ich viel nützlicher als -L, im Allgemeinen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top