我的朋友在一家 IT 公司工作,他需要对目录(包括子目录)内的 XML 文件进行计数。
然而,由于文件数量达到数百万,因此使用或类似的计数ls -LR | grep .xml
需要花费大量时间。
我在想什么是更好的方法?
某种后台进程可以处理这个问题,以便每当创建新文件或修改时间更改时,它都会影响计数器(文件数)吗?
答案1
您描述的守护进程可以使用inotify。
但也许使用find
andwc -l
已经足够快了?
我只运行了一项快速测试,但在我的系统上time ls -lR /mm/|grep -c jpg
( real 0m2.168s
) 和time find /mm -type f -name \*jpg|wc -l
( )之间存在显着差异。real 0m0.397s
两者都返回大约 42000 个文件,因此较大目录的差异可能会更大。
(我多次运行这两个命令以排除磁盘缓存影响。)
答案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