Ich frage mich, ob wir die Ehrlichkeit von "du" mit der eingerückten Formatierung von "tree" kombinieren können. Wenn ich eine Liste der Größe von Verzeichnissen haben möchte:
du -hx -d2
... zeigt zwei Ebenen tief und alle Größenzusammenfassungen sind ehrlich, aber es gibt keine Einrückungen von Unterverzeichnissen. Auf der anderen Seite:
tree --du -shaC -L 2
... gut eingerückt und eingefärbt, aber die angegebenen Größen sind eine Lüge. Um die tatsächlichen Größen zu erhalten, muss man:
tree --du -shaC
... das heißt, Sie erhalten nur dann die wahren Größen, wenn Sie sich die gesamte Verzeichnisstruktur von 'tree' anzeigen lassen. Ich möchte immer Zusammenfassungen der richtigen Größe haben, unabhängig davon, wie viele Ebenen von Unterverzeichnissen ich tatsächlich anzeigen möchte. Ich mache das oft:
tree -du -shaC | grep "\[01;34m"
... was alles außer Verzeichnissen herausschneidet und sie gut einrückt ... aber es gibt keine einfache Möglichkeit, die Anzeige auf eine bestimmte Anzahl von Ebenen zu beschränken (ohne dass die Zusammenfassungen lügen). Gibt es einen Weg? Vielleicht habe ich die richtigen Schalter verpasst ...
quelle
Sie müssen nicht nach dem Farbcode suchen, die
-d
Option istlist directories only
.Dies scheint zu tun, was Sie wollen:
Mit dem
grep
Befehl werden alle Zeilen mit (einem oder mehreren Leerzeichen, gefolgt von einem Nicht-Leerzeichen, gefolgt von einem Leerzeichen) zweimal entfernt, gefolgt von einem[
.Wenn Sie eine Tiefe von 1 wünschen, ändern Sie die Anzahl der Bindungen in den geschweiften Klammern von {} in
{1}
anstatt{2}
. Das Gleiche gilt, wenn Sie eine Tiefe von 3 wünschen. Ändern Sie sie in{3}
.Sie können dies wie folgt in eine Shell-Funktion umwandeln:
Dies wird verwendet
getopts
, um eine-L
Option und ihr Argument von dertree
Befehlszeile zu "stehlen" , falls es eine gibt. Wenn es keine gibt-L n
in der Befehlszeile Option angezeigt wird, funktioniert dies auch.Alle anderen Optionen und Argumente werden an den
tree
Befehl übergeben.Die
local PATTERN=...
Leitung ist nicht wirklich notwendig. Ich habe es nur so gemacht, um sicherzustellen, dass es in eine Zeile passt und hier nicht in ZeilenumbrücheU&L
. Der reguläre Ausdruck könnte und sollte wahrscheinlich direkt in dietree | grep ...
Zeile eingefügt werden.Führen Sie es so aus:
oder
quelle
-L
als Problem erwähnt, aber überhaupt nicht erwähnt-d
. Jetzt, wo ich mir die gemeldeten Zahlen genauer ansehe,tree --du
nochtree --du -d
Größen, die in irgendeiner Weise denen ähneln, die von gemeldet wurdendu
.tree --du
Scheint ohnehin nicht die richtigen Größen für Verzeichnisse anzugeben, mit oder ohne-d
oder-L
. Ich habe keine Ahnung, wie die Zahlen lauten sollen, aber sie haben nichts mit welchendu
Berichten zu tun .Sie können dutree verwenden
quelle
Es gibt kein perfektes Befehls-Tool, um dies zu tun, aber ich habe zwei Möglichkeiten gefunden, die eng beieinander liegen.
Zeigt die Größe von Ordnern und Dateien an, jedoch nicht in einem Baummodus.
du -ah --max-depth=1 /var/log
Zeigt im Baummodus aber nur die Dateigröße an, die Ordner werden gezählt
tree -ah /var/log -L 1
quelle
Inspiriert von cas mache ich jetzt Folgendes:
quelle
"$@"
gleich nach dem haben-shaC
. Andernfalls ist diese Funktion fest programmiert und funktioniert nur für das aktuelle Verzeichnis.getopts
ist, dass die Optionen in der Befehlszeile in beliebiger Reihenfolge angezeigt werden können. Die erste Version dermytree
Funktion habe ich „$ 1“ verwendet , so wie Ihr tat, so die Tiefe Argument sein , hatte das erste Argument, und es war nicht optional. Ich entschied, dass das nicht gut genug war, also benutzte ich die eingebaute Bashgetopts
, um die-L
Option zu verarbeiten . Dadurch konnte die-L n
Option an einer beliebigen Stelle in der Befehlszeile angezeigt werden. Es erlaubte auch, dass es völlig optional war.getopts
dass Sie Skripte schreiben können, die echte Optionen und Argumente enthalten (anstatt nur Argumente in fest codierten Positionen wie $ 1 $ 2 $ 3 usw.), genau wie die meisten anderen Programme auf Ihrem System. Und wenn Sie dasgetopt
Programms
aus demutil-linux
Paket verwenden (beachten Sie, dass es ohne ein ) , können Sie sowohl kurze Optionen mit einem Buchstaben (z. B.-l
) als auch lange Optionen (wie z. B. )--long
wie GNU-Programme verwenden.