Ich versuche, eine Festplatte zu bereinigen, auf der sich im Laufe der Jahre alle Arten von Mist angesammelt haben. du
hat dazu beigetragen, die Festplattennutzung zu reduzieren, aber das Ganze ist immer noch unhandlich, nicht aufgrund der Gesamtgröße, sondern aufgrund der bloßen Anzahl von Dateien und Verzeichnissen insgesamt.
Gibt es eine Möglichkeit, etwas zu tun du
, ohne die Dateigröße zu zählen, sondern die Anzahl der Dateien und Verzeichnisse? Beispiel: Eine Datei ist 1, und ein Verzeichnis ist die rekursive Anzahl der darin enthaltenen Dateien / Verzeichnisse + 1.
Edit: Ich hätte klarer sein sollen. Ich möchte nicht nur auf die Gesamtzahl der Dateien / Verzeichnisse kennen /
, sondern auch in /home
, /usr
etc, und in Unterverzeichnisse rekursiv, wie du
tut für Größe.
Antworten:
Ich habe es
du --inodes
nützlich gefunden , bin mir aber nicht sicher, welche Versiondu
davon erforderlich ist. Unter Ubuntu 17.10 funktioniert Folgendes:Kombinieren Sie mit
| sort -nr
, um absteigend nach der Anzahl der enthaltenen Inodes zu sortieren.quelle
Der einfachste Weg scheint zu sein
find /path/to/search -ls | wc -l
Suchen wird verwendet, um alle Dateien und Ordner zu durchsuchen.
-ls
alle Namen auflisten (drucken). Dies ist eine Standardeinstellung, und wenn Sie sie weglassen, funktioniert sie fast auf allen Systemen gleich. (Fast, da einige unterschiedliche Standardeinstellungen haben könnten). Es ist jedoch eine gute Angewohnheit, dies explizit zu verwenden.Wenn Sie nur das
find /path/to/search -ls
Teil verwenden, werden alle Dateien und Verzeichnisse auf Ihrem Bildschirm gedruckt.wc
ist die Wortzahl. Die-l
Option weist es an, die Anzahl der Zeilen zu zählen.Sie können es auf verschiedene Arten verwenden, z
Mit der ersten Option können wir eine Datei öffnen und die Anzahl der Zeilen, Wörter und Zeichen in dieser Datei zählen. Die zweite Option macht dasselbe, liest aber ohne Dateinamen von stdin.
Sie können Befehle mit einer Pipe kombinieren
|
. Die Ausgabe des ersten Befehls wird an die Eingabe des zweiten Befehls weitergeleitet. Sofind /path/to/search -ls | wc -l
finden Anwendungen alle Dateien und Verzeichnisse aufzulisten und speist die Ausgabe WC. Wc zählt dann die Anzahl der Zeilen.(Eine andere Alternative wäre "ls | wc" gewesen, aber find ist viel flexibler und ein gutes Werkzeug zum Lernen.)
[Nach Kommentar bearbeiten]
Es kann nützlich sein, find und exec zu kombinieren.
ZB
find / -type d ! \( -path proc -o -path dev -o -path .snap \) -maxdepth 1 -exec echo starting a find to count to files in in {} \;
werden alle Verzeichnisse in / aufgelistet, einige, die Sie nicht durchsuchen möchten. Wir können den vorherigen Befehl für jeden von ihnen auslösen und eine Summe von Dateien pro Ordner in / ergeben.Jedoch:
Es funktioniert unter Linux, aber nicht unter Unix-a-Alike.
quelle
Das folgende PHP-Skript macht den Trick.
Legen Sie das in eine Datei (sagen wir "
treesize
")chmod +x
und führen Sie es mit aus./treesize . | sort -rn | less
.quelle
du
, die einfach zählt, anstatt die Größe zu summieren, genau das hat die ursprüngliche Frage gestellt.ncdu ist großartig dafür!
Auf der Manpage können Sie auch die Anzahl pro Verzeichnis und die Reihenfolge nach Anzahl anzeigen:
Zum Beispiel:
quelle
Nutzen Sie die Tatsache, dass Verzeichnisse und Dateien durch getrennt sind
/
. Dieses Skript erfüllt zwar Ihre Kriterien, dient jedoch als Inspiration für eine vollständige Lösung. Sie sollten auch erwägen, Ihre Dateien mit find zu indizieren.>
>
quelle
Hier ist eine Lösung, die Bash verwendet, inspiriert von einem Beitrag von Unix & Linux .
Wenn es einige Ordner gibt, deren Details Sie nicht sehen möchten
.git
, können Sie sie von der Liste mit ausschließengrep
.quelle