Ich möchte sehen, wie viele Dateien sich in Unterverzeichnissen befinden, um herauszufinden, wo sich die gesamte Inode-Nutzung auf dem System befindet. Ein bisschen wie ich würde dies für die Raumnutzung tun
du -sh /*
Das gibt mir den Platz, der in den Verzeichnissen außerhalb von root verwendet wird, aber in diesem Fall möchte ich die Anzahl der Dateien, nicht die Größe.
disk-usage
recursive
inode
Xenoterracid
quelle
quelle
du -sh /*
machte ziemlich deutlich, wie ich wollte, dass der Zähler funktioniert. Zähle einfach die Dateien und nicht die Bytes.Antworten:
Vielen Dank an Gilles und Xenoterracide für die Sicherheits- und Kompatibilitätsverbesserungen.
Der erste Teil:
find -maxdepth 1 -type d
Gibt eine Liste aller Verzeichnisse im aktuellen Arbeitsverzeichnis zurück. Dies wird geleitet, um ...Der zweite Teil:
while read -r dir; do
beginnt eine while-Schleife - solange die in die while kommende Pipe offen ist (bis die gesamte Verzeichnisliste gesendet wurde), setzt der Lesebefehl die nächste Zeile in die Variable "dir". Dann geht es weiter ...Der dritte Teil:
printf "%s:\t" "$dir";
gibt die Zeichenfolge in "$ dir" (der einen der Verzeichnisnamen enthält) gefolgt von einem Tabulator aus.Der vierte Teil:
find "$dir -f file"
Erstellt eine Liste aller Dateien innerhalb des Verzeichnisnamens in "$ dir". Diese Liste wird gesendet an ..Der fünfte Teil:
wc -l;
Zählt die Anzahl der Zeilen, die in die Standardeingabe gesendet werden.Der letzte Teil:
done
Beendet einfach die while-Schleife.So erhalten wir eine Liste aller Verzeichnisse im aktuellen Verzeichnis. Für jedes dieser Verzeichnisse erstellen wir eine Liste aller darin enthaltenen Dateien, damit wir sie alle mit zählen können
wc -l
. Das Ergebnis sieht folgendermaßen aus:quelle
read -r
alsread
Spezialbehandlung. Dannecho -en "$dir:\t"
werden wieder Backslashes entstellt; Eine einfache Lösung ist,printf '%s:\t' "$dir"
stattdessen zu verwenden . Als nächstes$dir
sollte"$dir"
(verwenden Sie immer doppelte Anführungszeichen um variable Substitutionen ).find -maxdepth 1 -type d | while read -r dir; do printf "%s:\t" "$dir"; find "$dir" | wc -l; done
sort -n -r -k2
-type f
, um es Dateienfind -maxdepth 1 -type d | while read -r dir; do printf "%s:\t" "$dir"; find "$dir" -type f | wc -l; done
Versuchen Sie
find . -type f | wc -l
, es werden alle Dateien im aktuellen Verzeichnis sowie alle Dateien in Unterverzeichnissen gezählt. Beachten Sie, dass nicht alle Verzeichnisse als Dateien gezählt werden, sondern nur normale Dateien.quelle
Hier ist eine Zusammenstellung einiger nützlicher Auflistungsbefehle (basierend auf dem Code früherer Benutzer neu gehasht):
Liste der Ordner mit der Anzahl der Dateien:
Listen Sie Ordner mit einer ungleichen Anzahl von Dateien auf:
Ordner mit Unterordneranzahl auflisten:
Listen Sie Ordner mit einer Unterordneranzahl ungleich Null auf:
Leere Ordner auflisten:
Liste nicht leerer Ordner mit Inhaltsanzahl:
quelle
Versuchen:
als Ausgangspunkt oder wenn Sie wirklich nur die Unterverzeichnisse eines Verzeichnisses durchsuchen möchten (und die Dateien in diesem Verzeichnis der obersten Ebene überspringen möchten)
quelle
find
Arbeitet standardmäßig rekursiv durch alle Unterverzeichnisse. Wenn Sie möchten, dass es an mehreren Orten funktioniert, können Sie alle zwischenfind
und angeben-type
.698035
. Ich sollte ungefähr 6 Zahlen sehen./home
? Ich wäre mir zu 100% sicher, dass Sie das nicht tun.Die folgende Lösung zählt die tatsächliche Anzahl der verwendeten Inodes ab dem aktuellen Verzeichnis:
Um die Anzahl der Dateien derselben Teilmenge zu ermitteln, verwenden Sie:
Bei Lösungen, die nur Unterverzeichnisse durchsuchen, ohne die Dateien im aktuellen Verzeichnis zu berücksichtigen, können Sie auf andere Antworten verweisen.
quelle
find -printf '%i\n' | sort -u | wc -l
. Wenn Sie portabel sein möchten, müssen Siefind . -exec ls -id {} + | cut …
stattdessen.OS X 10.6 unterbricht den Befehl in der akzeptierten Antwort, da kein Pfad für angegeben wird
find
. Verwenden Sie stattdessen:quelle
Ich weiß, dass ich zu spät zur Party komme, aber ich glaube, dass diese reine
bash
(oder andere Shell, die Double Star Glob akzeptiert) Lösung in einigen Situationen viel schneller sein könnte:Ausgabe:
quelle
Probieren Sie es aus:
Es sollte gut funktionieren, es sei denn, Dateinamen enthalten Zeilenumbrüche.
quelle
-maxdepth 1
sofort nach dem ersten hinzuzufügenfind
. Wenn Sie die Anzahl der Unterverzeichnisse in Ihre Zählung einbeziehen möchten, entfernen Sie das-type f
am Ende (das hätte eigentlich! -type d
sowieso so sein müssen, dass alle Nicht-Verzeichnisdateien eingeschlossen worden wären).Wenn Sie die
ncdu
installiert haben (ein Muss, wenn Sie eine Bereinigung durchführen möchten), geben Sie einfachc
"Anzeige der Anzahl der untergeordneten Elemente umschalten" ein. UndC
zu "Nach Artikeln sortieren".quelle
du - inodes
Ich bin mir nicht sicher, warum niemand (ich selbst eingeschlossen) wusste:
Ich bin mir ziemlich sicher, dass dies das Problem des OP löst. Ich habe viel damit angefangen, um herauszufinden, wo sich all der Müll in meinen riesigen Laufwerken befindet (und um ihn auf eine ältere Festplatte auszulagern).
Weitere Infos
Wenn Sie NICHT wiederkehren möchten (was in anderen Situationen nützlich sein kann), fügen Sie hinzu
quelle