XMLファイルの数を保存するタスク

XMLファイルの数を保存するタスク

私の友人はIT会社に勤務しており、ディレクトリ(サブディレクトリを含む)内のXMLファイルの数を数える必要があります。

ただし、ファイル数は数百万に達するため、それを使用するか、同様の計算を実行するのにls -LR | grep .xml多くの時間がかかります。

より良い方法が何であるか疑問に思います。

新しいファイルが作成されるか、変更時間が変わるたびにカウンタ(ファイル数)に影響を与えるように、バックグラウンドプロセスの一種はそれを処理できますか?

答え1

説明するデーモンは次のように動作します。inotify

しかし、たぶん使用するfindのはwc -l十分速いでしょうか?

簡単なテストのみを実行してみましたが、私のシステムではtime ls -lR /mm/|grep -c jpgreal 0m2.168s)と()time find /mm -type f -name \*jpg|wc -lの間にかなりの違いがあります。real 0m0.397sどちらも約42,000個のファイルを返すため、大きなディレクトリの場合は違いが大きくなる可能性があります。

(ディスクキャッシュ効果を排除するために、2つのコマンドを複数回実行しました。)

答え2

次のスクリプトはディレクトリを無期限に監視し、ディレクトリの内容が変更されるたびに「* .xml」ファイルの数を印刷します。

DIR="a_path_to_directory_to_watch"
(echo; inotifywait -m -r -e create -e delete "$DIR" 2> /dev/null) |
    while read; do
        find "$DIR" -name '*.xml' -printf . | wc -c
    done

関連情報