xargs+へfind

xargs+へfind

以下の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

おすすめ記事