2017-01-10 4 views
-4

Ich habe eine While-Schleife geschrieben, um eine Datei Zeile für Zeile zu lesen.Unix While-Loop dauert lange

while read file 
do 
    FileFound="`find $DataDir -name $file -print 2>/dev/null`" 
    if [ -n "$FileFound" ]; then 
    echo $FileFound >> ${runDir}/st_$Region 
    else 
    echo $file >> ${APP_HOME}/${Region}_filesnotfound_$date.txt 
    fi 
done < ${Region}_${date}.txt 

Für 8000 Datensätze dauerte es fast 2 Tage zu vervollständigen. Wie optimiere ich es?

+3

Bitte nehmen Sie die [Tour] (https://stackoverflow.com/tour) und lesen Sie [How To Ask] (https://stackoverflow.com/help/how-to-ask). Ihre Frage ist nicht Thema für SO. Suchen Sie nach einem [Code Review] (https://codereview.stackexchange.com/)? –

+1

Unix ist keine Programmiersprache. –

Antwort

2

Der Grund Ihrer Schleife eine lange Zeit nimmt, weil es ist find 8000 Mal ausgeführt wird, einmal für jede Datei! Das ist sehr teuer. Sie können eine einzige find für alle Dateien unter $ DataDir ausführen, speichern Sie es in einer Datei und verwenden Sie es dann zum Nachschlagen Ihrer Dateien. Das würde deine Schleife dramatisch beschleunigen.