2017-01-10 149 views
-4

我寫了一個while循環來逐行讀取文件。Unix循環花費很長時間

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 

對於8000條記錄,它幾乎需要2天才能完成。我如何優化它?

+3

請參考[Tour](https://stackoverflow.com/tour)並閱讀[如何提問](https://stackoverflow.com/help/how-to-ask)。你的問題是SO的話題。你在尋找[代碼評論](https://codereview.stackexchange.com/)嗎? –

+1

Unix不是一種編程語言。 –

回答

2

您的循環正在採取的原因時間是因爲它正在運行find 8000次,每個文件一次!這真的很貴。您可以爲$ DataDir下的所有文件運行一個find,將其存儲在一個文件中,然後用它來查找您的文件。這會大大加速你的循環。