以下の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
whileループはファイル名を読み取り、datadirでそれらを比較して一致するものがあるかどうかを確認します。利用可能な場合は、フルパスをファイルに入れます。利用できない場合は、別のファイルに保存されます。ただし、このスクリプトは8000レコードを読み取るのに2日かかります。最適化する方法はありますか?
ベストアンサー1
最新のLinuxデスクトップを使用している場合は、次のファイルインデックス作成ツールがあります。mlocate
バックグラウンドでファイルがすでにインストールされており、インデックス化されています。その場合は、次のものを使用できます。
while read file
do
locate "$file" >> "${runDir}/st_$Region" || echo "$file" >> "${APP_HOME}/${Region}_filesnotfound_$date.txt"
done<"${Region}_${date}.txt"
探しているファイルが頻繁に更新される場合は、まずデータベース更新を手動で強制することができます。updatedb
またはあなたのバージョンに合うものは何でも可能ですlocate
。