Lösung 1:
Wenn Sie dies auf einem dedizierten Dateisystem haben oder Sie eine konstante Anzahl von Dateien haben, können Sie die Anzahl der Dateien möglicherweise ungefähr genug zählen, indem Sie die Anzahl der Inodes im Dateisystem über " df -i":
[email protected]:~# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 60489728 75885 60413843 1% /
Auf meiner Testbox oben habe ich 75.885 Inodes zugewiesen. Diese Inodes sind jedoch nicht nur Dateien, sondern auch Verzeichnisse. Zum Beispiel:
[email protected]:~# mkdir /tmp/foo
[email protected]:~# df -i /tmp
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 60489728 75886 60413842 1% /
[email protected]:~# touch /tmp/bar
[email protected]:~# df -i /tmp
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 60489728 75887 60413841 1% /
HINWEIS:Nicht alle Dateisysteme verwalten Inode-Zählungen auf die gleiche Weise. ext2/3/4 werden alle funktionieren, aber btrfs meldet immer 0.
Wenn Sie Dateien von Verzeichnissen unterscheiden müssen, müssen Sie das Dateisystem durchlaufen und jedes "statieren", um zu sehen, ob es sich um eine Datei, ein Verzeichnis, einen Sym-Link usw. handelt ... Das größte Problem hier ist nicht die Weiterleitung des gesamten Textes an "wc", aber das Herumsuchen unter allen Inodes und Verzeichniseinträgen, um diese Daten zusammenzusetzen.
Abgesehen von der Inode-Tabelle, die durch "df -i" angezeigt wird, gibt es wirklich keine Datenbank darüber, wie viele Dateien sich in einem bestimmten Verzeichnis befinden. Wenn Ihnen diese Informationen jedoch wichtig sind, können Sie eine solche Datenbank erstellen und verwalten, indem Sie Ihre Programme eine Zahl erhöhen lassen, wenn sie eine Datei in diesem Verzeichnis erstellen, und sie verringern, wenn sie gelöscht werden. Wenn Sie die Programme, die sie erstellen, nicht kontrollieren, ist dies keine Option.
Lösung 2:
Ich habe ein benutzerdefiniertes Dateizählprogramm für diese StackOverflow-Frage geschrieben:https://stackoverflow.com/questions/1427032/fast-linux-file-count-for-a-large-number-of-files
Sie finden das GitHub-Repository hier, wenn Sie es durchsuchen, herunterladen oder beitragen möchten:https://github.com/ChristopherSchultz/fast-file-count
Lösung 3:
Wenn Sie die Anzahl der Dateien in einem Verzeichnis rekursiv zählen möchten, verwenden Sie locate Befehl ist der schnellste, den ich kenne, vorausgesetzt, Sie haben eine aktuelle Datenbank (sudo update database .. wird standardmäßig jeden Tag über chron job durchgeführt). Sie können den Befehl jedoch beschleunigen, wenn Sie das grep vermeiden Rohr.
Siehe man ortet :
-c, --count
Instead of writing file names on standard output, write the number of
matching entries only.
Der schnellste Befehl ist also:
locate -c -r '/path/to/dir'