Mit find Dateien und Ordner zählen
Ich dachte es wäre sicher kein Problem unter Linux alle Dateien in einem Ordner und aller Unterordner zu zählen, da es ja sogar in Windows sehr einfach geht, aber es hat doch eine Weile gedauert bis ich die Lösung hatte die ich wollte. Ich hatte ein größeres Archiv runter geladen, das fehlerhaft bei mir angekommen ist, also wollte ich sehen ob es sich lohnt das ganze nochmal zu ziehen oder doch lieber nur das was mir noch fehlte. Dazu wollte ich herausfinden wie viele Dateien und Ordner ich lokal hatte und wie viele ich auf dem Server habe. Googlt man danach, findet man so einige Lösungen, die mir aber alle nicht wirklich gefielen. Ich wollte kein Extra Script schreiben oder ne Stunde auf das Ergebnis warten. Hier nun die Lösung die ich gefunden habe kurz vorgestellt und erklärt.
Will man nur die Anzahl der Dateien im Aktuellen Verzeichnis haben geht dies sehr einfach. Das ls -1 (die Zahl eins) listet alle Dateien im aktuellen Ordner auf. Jede Datei wird auf einer eigenen Zeile dargestellt. Mit wc -l (das kleine L) zählt nun die Zeilen und gibt die Anzahl aus.
$ ls -1 | wc -l
Bedenken sollte man dabei natürlich das auf Linux Systemen Ordner auch Dateien sind, diese werden hier also auch mit gezählt. Wer nur die Dateien im aktuellen Ordner zählen möchte kann dies so machen:
$ find . -maxdepth 1 -type f | wc -l
Der Punkt gibt das aktuelle Verzeichnis an, -maxdepth 1 sagt find das es nur in diesem Verzeichnis suchen soll (nicht in Unterverzeichnissen) und -type f sagt das nur Files gesucht werden sollen. wc -l zählt dann wieder die daraus resultierenden Zeilen und gibt die Anzahl aus. Will man nun alle Dateien im angegebenen Verzeichnis und allen Unterverzeichnissen zählen, dann kann man dies sehr einfach anpassen indem man das -maxdepth weg lässt.
$ find . -type f | wc -l
Über den Parameter type kann man das gleiche auch für Verzeichnisse erzielen. Ersetzt man das f durch ein d, dann werden alle Verzeichnisse in allen Unterverzeichnissen gezählt. Zusammen mit dem maxdepth Parameter kann man nun zählen was man will. Note: das eigentliche Verzeichnis (.) wird auch gezählt!
$ find . -type d | wc -l $ find . -maxdepth 1 -type d | wc -l
Es gibt noch einige andere Lösungswege per du, per ls oder auch per perl. Find ist aber sehr schnell und man muss nicht noch extra per grep Filtern. Außerdem kann man die Anfragen mit den find Parametern weiter verfeinern.