Der Windows- dir
Befehl zum Auflisten von Verzeichnissen enthält am Ende eine Zeile, die den gesamten von den aufgelisteten Dateien belegten Speicherplatz angibt. dir *.exe
Zeigt zum Beispiel alle .exe
Dateien im aktuellen Verzeichnis, ihre Größe und die Gesamtsumme ihrer Größe an. Ich würde gerne eine ähnliche Funktionalität mit meinem dir
Alias in Bash haben, aber ich bin mir nicht sicher, wie ich genau vorgehen soll.
Derzeit habe ich alias dir='ls -FaGl'
in meiner .bash_profile
, zeigt
drwxr-x---+ 24 mattdmo 4096 Mar 14 16:35 ./
drwxr-x--x. 256 root 12288 Apr 8 21:29 ../
-rw------- 1 mattdmo 13795 Apr 4 17:52 .bash_history
-rw-r--r-- 1 mattdmo 18 May 10 2012 .bash_logout
-rw-r--r-- 1 mattdmo 395 Dec 9 17:33 .bash_profile
-rw-r--r-- 1 mattdmo 176 May 10 2012 .bash_profile~
-rw-r--r-- 1 mattdmo 411 Dec 9 17:33 .bashrc
-rw-r--r-- 1 mattdmo 124 May 10 2012 .bashrc~
drwx------ 2 mattdmo 4096 Mar 24 20:03 bin/
drwxrwxr-x 2 mattdmo 4096 Mar 11 16:29 download/
zum Beispiel. Antworten auf diese Frage :
dir | awk '{ total += $4 }; END { print total }'
Das gibt mir die Gesamtsumme, druckt aber die Verzeichnisliste selbst nicht aus. Gibt es eine Möglichkeit, dies in ein Einzeilen- oder Shell-Skript zu ändern, damit ich alle ls
gewünschten Argumente übergeben dir
und eine vollständige Auflistung plus Gesamtsumme erhalten kann? Ich möchte beispielsweise ausführen dir -R *.jpg *.tif
, um die Liste und die Gesamtgröße dieser Dateitypen in allen Unterverzeichnissen abzurufen. Im Idealfall wäre es großartig, wenn ich die Größe jedes Unterverzeichnisses ermitteln könnte, aber das ist nicht unbedingt erforderlich.
quelle
ls -lh
hilft dir das nicht? Es gibt die Gesamtsumme oben aus. Sie können auch ausführendu -sh *.exe
, um Informationen zur Speicherplatznutzung in lesbarer Form abzurufen.ls -lh
, aber es hängt nicht immer damit zusammen, was dieawk
unten stehenden Skripte berechnen oder was ich von Hand addiere. Manchmal liegt es nahe an der Anzahl der KB an Dateien im Verzeichnis, aber es scheint nicht die zugewiesenen Größen der Unterverzeichnisse zu berücksichtigen. Ich wäre Ihnen dankbar, wenn Sie mir erklären könnten, was genau diese Zahl ist ...ls -lh
zeigt nicht die Gesamtgröße einesAntworten:
Die folgende Funktion erledigt die meisten Ihrer Anfragen:
... aber es wird dir nicht das geben, wonach du fragst
dir -R *.jpg *.tif
, denn sols -R
funktioniert es nicht. Vielleicht möchten Sie mit demfind
Dienstprogramm dafür herumspielen.quelle
dir
ist bereits der Name eines populären GNU-Coreutils, ich würde eine solche Funktion lieber nicht nennen.Dafür gibt es bereits einen UNIX-Befehl:
du
Mach einfach:
Gemäß Konvention können Sie am Ende des Befehls einen oder mehrere Datei- oder Verzeichnispfade hinzufügen.
-h
ist eine Erweiterung, um die Größe in ein benutzerfreundliches Format zu konvertieren.-a
Sie gibt die "scheinbare" Größe (Dateigröße anstelle der Festplattennutzung) an und-c
gibt am Ende eine Gesamtsumme an.quelle
du
die Festplattennutzung angegeben wird, nicht die Summe der Dateigrößen.du -h
summiert nicht die Größe der übergebenen Dateien.du -h *.so
zeigt die Größe jeder Datei, aber nicht die Summe. Ich denke, was Sie hier wollen, istdu -hc *.so
(oder sogardu -hc *.so | tail -1
). Aber er will natürlich auch die Verzeichnisliste.-a
bedeutet--all
. Ziehen Sie es in Betracht, stattdessen--apparent-size
Sie können verwenden
du -h -c directory|tail -1
Dadurch wird eine einzelne Zeile mit der Speichernutzung generiert.
quelle
du -hs directory
wenn du nur die Summe willst.Gib einfach die aktuelle Zeile aus, in der du die Summe von:
quelle
mit perl:
Größe aller nicht ausgeblendeten PDF-Dateien im aktuellen Verzeichnis.
quelle
Das Hinzufügen des Folgenden zu .bash_profile oder .bashrc funktioniert für mich.
Wenn ich jetzt eine dir * .mp3 mache, dann rekursiv und druckt am Ende total. Sie können steuern, wie viel Tiefe Sie möchten, indem Sie der Suche einen maxdepth-Parameter hinzufügen. Ich weiß, zweimal zu finden ist keine sehr effektive Idee. Aber ich könnte mir keinen besseren Weg vorstellen. Zumindest wird es die Arbeit erledigt.
quelle
Die Verwendung von du und einer awk- Anweisung wie der oben genannten liefert das, wonach Sie suchen.
Beispiel:
du /home/abc/Downloads/*.jpg | awk '{ print; total += $1 }; END { print "total size: ",total }'
Dies listet alle Dateien im Ordner Downloads des Benutzers abc auf, die mit .jpg enden, und gibt die Summe aller dieser Dateien am Ende der Auflistung aus.
quelle
Um sowohl Dir-Ausgabe als auch Größenberechnung zu erhalten, ohne eine der anderen vorgeschlagenen Optionen zu verwenden, können Sie tee (1) verwenden und Substitution verarbeiten ...
quelle
tee
, nurdir | awk '{print; total += $4}; END {print total}'
quelle
linux sum human readable sizes
und genau das, wonach ich suche.quelle