Verzeichnis mit Millionen von Dateien: speichereffiziente Möglichkeit zum Auflisten von Dateien (Linux/Ext4)

Verzeichnis mit Millionen von Dateien: speichereffiziente Möglichkeit zum Auflisten von Dateien (Linux/Ext4)

Leider habe ich eine Anwendung, die Millionen von Dateien in einem flachen Verzeichnis (ohne Unterverzeichnisse) ablegt.

Wenn ich ein „ls“ oder „find“ auf dem angegebenen Verzeichnis ausführe, verbrauchen „ls“ oder „find“ mehrere Gigabyte RAM.

Ich vermute, der Grund liegt darin, dass ls und find alle Dateien eines Verzeichnisses in den RAM lesen.

Meine Frage ist.

Gibt es eine Möglichkeit, die Dateien dieses Verzeichnisses aufzulisten, ohne so viel Speicher zu verbrauchen?

Jede Lösung (spezielle Optionen / andere Befehle / zu kompilierendes C-Programm / ein spezielles Python-Modul) wäre interessant.

Antwort1

Es gibt:

Der lsBefehl liest nicht nur die Dateinamen, sondern auch fstat()alle Dateien. Wenn Sie die opendir() / readdir() / close()Sequenz verwenden, sind Sie deutlich erfolgreicher.

Darüber hinaus sind auch die zum Auflisten eines Verzeichnisses benötigten Ressourcen eine Funktion des Dateisystems: XFSbenötigt viel weniger als ext4.

verwandte Informationen