GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Schnelle Möglichkeit, Dateien unter Linux rekursiv zu zählen

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'

Linux
  1. So erhöhen Sie das Limit für die Anzahl der geöffneten Dateien in Linux

  2. Was ist der beste Weg, um die Anzahl der Dateien in einem Verzeichnis zu zählen?

  3. Maximale Anzahl von Dateien/Verzeichnissen unter Linux?

  4. Dateien in einem Linux-Verzeichnis rekursiv zählen

  5. Schnellere Möglichkeit, eine große Anzahl von Dateien zu löschen

So kopieren Sie eine große Anzahl von Dateien unter Linux

Der schnellste Weg zum rekursiven Zählen von Dateien unter Linux

Wie man Dateien in Linux rekursiv auflistet

So zählen Sie Dateien im Verzeichnis unter Linux

Zählen Sie die Anzahl der Dateien in einem Verzeichnis in Linux

So zählen Sie die Anzahl der Dateien in einem Verzeichnis in Linux