Eintrag den Inhalt einer tar-Datei oder ein Verzeichnis nur bis zu einem gewissen Grad
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.
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.