如何通过终端精准检测文件的更新频率?
检测文件更新频率的终端方法
下面是几个比watch + ls更可靠、精度更高的方案:
1. 用inotifywait实时监听(推荐)
这是内核级的文件事件监听工具,能精准捕捉每次文件修改,不会因为检测间隔错过更新,还能输出纳秒级时间戳。
首先确保安装了inotify-tools包(Debian/Ubuntu用apt install inotify-tools,CentOS用yum install inotify-tools),然后执行:
inotifywait -m -e modify --timefmt '%Y-%m-%d %H:%M:%S.%N' --format '%T' /path/to/target/file
参数说明:
-m:持续监听,不触发一次就退出-e modify:只监听文件修改事件--timefmt:指定时间输出格式,这里包含纳秒,精度拉满--format:只输出时间戳,让结果更简洁
如果想直接计算更新间隔,把输出用awk处理:
inotifywait -m -e modify --timefmt '%s.%N' --format '%T' /path/to/target/file | awk 'BEGIN { prev = 0 } { if (prev != 0) printf "更新间隔:%.6f 秒\n", $1 - prev; prev = $1 }'
这样每次文件更新时,会直接打印和上一次更新的时间差,方便统计频率。
2. 用stat+循环轮询
如果系统没有inotifywait,用stat命令可以获取文件的高精度修改时间,配合循环轮询实现检测:
prev_mtime=$(stat -c %Y.%N /path/to/target/file) while true; do curr_mtime=$(stat -c %Y.%N /path/to/target/file) if [ "$curr_mtime" != "$prev_mtime" ]; then echo "更新时间:$(date +'%Y-%m-%d %H:%M:%S.%N')" prev_mtime=$curr_mtime fi sleep 0.01 # 轮询间隔,可根据需求调整,最小能到毫秒级 done
stat -c %Y.%N会输出文件修改时间的秒数+纳秒数,对比前后值就能判断文件是否更新,sleep间隔可以调得比watch更小,减少遗漏概率。
内容的提问来源于stack exchange,提问作者Yi Qiang Ji
相关产品推荐
相关产品推荐

