Angesichts der von Ihnen erwähnten 7-stündigen Laufzeit gehe ich davon aus, dass das Dateisystem einige Millionen Dateien enthält, sodass die im Betriebssystempuffer geladenen OS-Daten bei einer Abfrage wiederverwendet werden, bevor die nächste Abfrage beginnt. Sie können diese Hypothese testen, indem Sie dieselbe find
-Abfrage einige Male timen, wie im folgenden Beispiel.
tini ~ > time find . -name IMG_0772.JPG -ls
25430459 9504 lrwxrwxrwx 1 omg omg 9732338 Aug 1 01:33 ./pix/rainbow/IMG_0772.JPG
20341373 5024 -rwxr-xr-x 1 omg omg 5144339 Apr 22 2009 ./pc/2009-04/IMG_0772.JPG
22678808 2848 -rwxr-xr-x 1 omg omg 2916237 Jul 21 21:03 ./pc/2012-07/IMG_0772.JPG
real 0m15.823s
user 0m0.908s
sys 0m1.608s
tini ~ > time find . -name IMG_0772.JPG -ls
25430459 9504 lrwxrwxrwx 1 omg omg 9732338 Aug 1 01:33 ./pix/rainbow/IMG_0772.JPG
20341373 5024 -rwxr-xr-x 1 omg omg 5144339 Apr 22 2009 ./pc/2009-04/IMG_0772.JPG
22678808 2848 -rwxr-xr-x 1 omg omg 2916237 Jul 21 21:03 ./pc/2012-07/IMG_0772.JPG
real 0m0.715s
user 0m0.340s
sys 0m0.368s
Im Beispiel wurde der zweite find
viel schneller ausgeführt, weil das Betriebssystem immer noch Speicher pufferspeichern von dem ersten find
hatte. [Auf meinem kleinen Linux 3.2.0-32 System sind laut top
im Moment 2,5 GB RAM Puffer, 0,3 GB sind frei und 3,8 GB in Benutzung (d. h. etwa 1,3 GB für Programme und OS).]
Wie auch immer, um die Verarbeitung zu beschleunigen, müssen Sie einen Weg finden, den OS-Datenspeicher besser zu nutzen. Beispielsweise können Sie Ihren Systemspeicher verdoppeln oder vervierfachen. Als Alternative probieren Sie den locate
-Befehl aus. Die Abfrage
time locate IMG_0772.JPG
dauert konsistent weniger als eine Sekunde auf meinem System. Sie möchten vielleicht updatedb
kurz vor Beginn der Aufgabe ausführen, die die 1500 Dateinamen findet. Siehe man updatedb
. Wenn das Verzeichnis .
in Ihrem find
's nur einen kleinen Teil des gesamten Dateisystems angibt, sodass die locate
-Datenbank zahlreiche irrelevante Dateien enthält, verwenden Sie verschiedene prune
-Optionen, wenn Sie updatedb
ausführen, um die Größe der locate
-Datenbank zu minimieren, die beim Ausführen von locate
aufgerufen wird; und danach führen Sie ein einfaches updatedb
aus, um andere Dateinamen in der locate
-Datenbank wiederherzustellen. Durch die Verwendung von locate
können Sie die Laufzeit wahrscheinlich auf 20 Minuten verkürzen.