私の友人はIT会社に勤務しており、ディレクトリ(サブディレクトリを含む)内のXMLファイルの数を数える必要があります。
ただし、ファイル数は数百万に達するため、それを使用するか、同様の計算を実行するのにls -LR | grep .xml
多くの時間がかかります。
より良い方法が何であるか疑問に思います。
新しいファイルが作成されるか、変更時間が変わるたびにカウンタ(ファイル数)に影響を与えるように、バックグラウンドプロセスの一種はそれを処理できますか?
答え1
説明するデーモンは次のように動作します。inotify。
しかし、たぶん使用するfind
のはwc -l
十分速いでしょうか?
簡単なテストのみを実行してみましたが、私のシステムではtime ls -lR /mm/|grep -c jpg
(real 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