Ich möchte, dass ein BASH-Befehl nur die Anzahl der Dateien in jedem Unterverzeichnis eines Verzeichnisses auflistet.
ZB im Verzeichnis /tmp
gibt es dir1
, dir2
... würde ich gerne sehen:
`dir1` : x files
`dir2` : x files ...
Angenommen, Sie möchten nur eine rekursive Anzahl von Dateien, keine Verzeichnisse und andere Typen, dann sollte so etwas funktionieren:
find . -maxdepth 1 -mindepth 1 -type d | while read dir; do
printf "%-25.25s : " "$dir"
find "$dir" -type f | wc -l
done
find
...-print0 | xargs -0
....bash
alias
!!sort -rn -k 2,2 -t$':'
Sie die DESC-ListeDiese Aufgabe faszinierte mich so sehr, dass ich selbst eine Lösung finden wollte. Es ist nicht einmal eine while - Schleife nehmen und KANN schneller in der Ausführungsgeschwindigkeit. Unnötig zu erwähnen, dass Thors Bemühungen mir sehr geholfen haben, die Dinge im Detail zu verstehen.
Also hier ist meins:
Es sieht aus einem bestimmten Grund bescheiden aus, weil es viel mächtiger ist als es aussieht. :-)
Wenn Sie dies jedoch in Ihre
.bash_aliases
Datei aufnehmen möchten, muss dies folgendermaßen aussehen:Beachten Sie die sehr schwierige Behandlung verschachtelter einfacher Anführungszeichen. Und nein, es ist nicht möglich, doppelte Anführungszeichen für das
sh -c
Argument zu verwenden.quelle
strace -fc script
. Ihre Version macht ungefähr 70% mehr Systemaufrufe. +1 für kürzeren Code :-)find . -maxdepth 1 -mindepth 1 -type d -exec sh -c 'echo "$(find "{}" -type f | wc -l)" {}' \; | sort -nr
Listet einen Ordner und Dateien im aktuellen Ordner mit einer Anzahl von Dateien auf, die darunter gefunden werden. Schnelle und nützliche IMO. (Dateien werden mit Anzahl 1 angezeigt).
quelle
| sort -rn
, um Unterverzeichnisse nach Anzahl der Dateien zu sortieren.Die Verwendung von find ist definitiv der richtige Weg, wenn Sie rekursiv zählen möchten, aber nur die Dateien direkt unter einem bestimmten Verzeichnis zählen möchten:
ls dir1 | wc -l
quelle
ls -d */ | xargs -n1 ls | wc -l
(Verwenden Sie die Antwort, die Sie akzeptiert haben, wenn es bereits funktioniert! Dies ist nur und jetzt wissen Sie.)find
ist es so wichtig. (geschweige denn-print0
undxargs -0
, bereits von Scott in der anderen Antwort darauf hingewiesen)Ich muss oft die Anzahl der Dateien in meinen Unterverzeichnissen zählen und diesen Befehl verwenden. Ich bevorzuge, dass die Zählung zuerst erscheint.
quelle
Was ich benutze ... Dadurch wird ein Array aller Unterverzeichnisse in dem von Ihnen als Parameter angegebenen erstellt. Drucken Sie das Unterverzeichnis und die Anzahl desselben Unterverzeichnisses, bis alle Unterverzeichnisse verarbeitet sind.
quelle
Sie könnten diesen Python-Code verwenden. Starten Sie den Interpreter, indem Sie Folgendes
python3
ausführen und einfügen:Oder eine rekursive Version für verschachtelte Zählungen:
Beispielausgabe:
quelle