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 ls
Befehl 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: XFS
benötigt viel weniger als ext4
.