Ich habe mehr als 100.000 Dateien in einem Verzeichnis in meinem MacOS X und es sieht so aus, als würde mein Skript nur langsam eine Datei darin lesen.
Gibt es eine Einschränkung oder Empfehlung, so viele Dateien zu haben? Soll ich sie in einige Verzeichnisse aufteilen?
Die Einschränkung, die ich gefunden habe, war, dass ich nicht mv * foo
für alle 100.000 Dateien kann. Es zeigt einen Fehler mit der Aufschrift "zu langes Argument". Es funktioniert mit ungefähr weniger als 20.000 Dateien.
macos
mac
filesystems
Daisuki Honig
quelle
quelle
*
oder?
als Teil eines Arguments für einen Befehl verwenden, durchsucht das Betriebssystem das gesamte Verzeichnis nach übereinstimmenden Dateien (langsam) und ersetzt Ihr Argument durch eine Liste aller übereinstimmenden Dateien (lang), die es dann an die übergibt Befehl. Sie können es besser mit einer Schleife oder mit mehreren mv-Befehlen machen, zmv a* foo && mv b* foo
.Antworten:
Laut dieser Antwort zum Stapelüberlauf und spezifischen Details auf der Apple-Website kann ein einzelner Ordner bis zu 2,1 Milliarden Elemente enthalten.
Nur weil es bis zu 2,1 Milliarden Artikel aufnehmen kann, bedeutet dies nicht, dass die Leistung auf diesem Niveau gehalten werden kann. Laut Wikipedia ; Der Schwerpunkt liegt bei mir:
Daher wird die Leistung natürlich beeinträchtigt, da die Katalogdatei jeweils nur von einem Programm verwendet werden kann. Und wenn das Verzeichnis größer wird, eskaliert das durch dieses Problem verursachte Risiko / die Verschlechterung nur. Mehr Dateien bedeuten für Programme eine größere Chance, auf Dateien in diesem einen Verzeichnis zuzugreifen. Weitere Bestätigung dieser Idee hier ; wieder liegt der Schwerpunkt bei mir:
quelle
Kurze Antwort: Wenn Sie 100.000 Dateien lesen, kann ich davon ausgehen, dass das Skript langsam ist.
Lange Antwort: Um diese Frage genauer zu beantworten, müssen Sie sich das Dateisystem auf einem Mac ansehen. Macs verwenden das HFS + ( Hierarchical File System Plus ), ein modernes Dateisystem mit Einschränkungen, jedoch nur in extremen Situationen.
Nach meiner Erfahrung ähnelt es einem Linux EXT-Journaling-Dateisystem. Es unterstützt das Mounten von Verzeichnissen, UNIX-ähnlichen Berechtigungen usw. Es adressierte Dateien in einem 32-Bit-Format, sodass laut dieser Quelle die maximale Anzahl von Dateien auf einem Volume von 4.294.967.295 gespeichert werden kann .
Das Dateisystem beginnt mit Dateien zu brechen, die auf modernen Systemen größer als 8 EB sind, und bis zu 2,1 Milliarden Dateien und Ordner an einem Ort, wie hier beschrieben .
Angesichts der Art und Weise, wie das HFS + - oder wirklich jedes Dateisystem - eingerichtet ist, sollten viele Dateien in einem Ordner nichts „Seltsames“ bewirken.
Ehrlich gesagt glaube ich nicht, dass es eine Leistungsverbesserung geben würde, wenn die Dateien auf eine komplexere Ordnerhierarchie verteilt würden. Tatsächlich ist diese Technik möglicherweise weniger effizient, da Ihr Skript während des Prozesses Aufrufe zum Ändern von Verzeichnissen ausführen müsste.
quelle