updatedb の進捗バー

updatedb の進捗バー

実行時に信頼できる進行状況バー(または、どれくらい時間がかかるかという信頼できる情報)を取得することは可能ですかupdatedb

答え1

これは効率的な解決策ではありませんが、すべてを 2 回ループするほど悪くはありません。

処理されるファイルの数はupdatedb次のようになります:

updatedb -v | wc -l

または、おおよそ次のようになります。

find / -mount | wc -l

これらのコマンドは 2 回ループするため、数値を取得するために使用することはできません。

しかし、ほぼ同じである、使用されている inode の数を使用できます。

df -i | grep '/$' | awk '{print $3}'

updatedb -vこの値があれば、コマンドの実行中にどれだけ進んだかを計算できます。

count=$(df -i | grep '/$' | awk '{print $3}')

sudo updatedb -v | while read
do
    printf "%3d\r" $((100 * (++i) / count))
done

printfこれは、 の出力の各行に対して が呼び出されるため、非常に非効率的です。一部の行に対してのみが呼び出されるupdatedb -v方が効率的です。printf

count=$(df -i | grep '/$' | awk '{print $3}')

sudo updatedb -v | while read
do
    if (( ++i % (count/20) == 0 )); then
        printf "%3d\r" $((100 * i / count))
    fi
done

答え2

いいえ、そのようなオプションはありませんし、あるべきでもありません。

それを測定する必要がある場合は、まずシステム上にいくつのファイルが存在するかを知る必要があります。つまり、すべてを2回ループする必要があり、遅くなる可能性があります。

1 つの顕著な例は、 でカーネル ソース コードを抽出する場合file-roller、ファイル ローラーが最初にすべてのファイルをファイルする必要があり (そうしないと進行状況バーが誤って表示される可能性があります)、抽出プロセスが実際に開始されるまでしばらく待つ必要があるため、 で同じことをtar直接行うよりも遅くなることです。

関連情報