Unix while循环需要很长时间

时间:2017-01-10 00:30:26

标签: bash unix

我已经编写了一个while循环来逐行读取文件。

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天才能完成。我如何优化它?

1 个答案:

答案 0 :(得分:2)

你的循环占用时间的原因是因为它运行find 8000次,每个文件一次!这真的很贵。您可以为$ DataDir下的所有文件运行单个find,将其存储在文件中,然后使用它来查找文件。这会大大加快你的循环速度。