watch命令不能直接监控目录变化,但可通过定期执行find命令统计特定临时文件数量来实现,如watch -n 2 'find . -maxdepth 1 ( -name ".tmp" -o -name "~" ) -type f | wc -l'。

watch 命令本身不支持直接监控目录变化,但它可以周期性执行任意命令——所以核心思路是:用 watch 定期运行一个统计临时文件数量的命令,并以高亮方式显示变化。
明确“临时文件”的定义
Linux 中没有统一的“临时文件”类型,需根据实际场景自行界定。常见判断依据包括:
- 文件名含 .tmp、~、.swp、.swo 等后缀
- 位于标准临时路径(如 /tmp、/var/tmp)或项目自定义的缓存/临时目录(如 ./cache/、./.temp/)
- 按修改时间筛选(如最近 5 分钟内创建的文件),可用 find -mmin -5
基础监控命令(推荐使用 find + wc)
假设你要监控当前目录下所有 .tmp 和 ~ 结尾的文件数量:
watch -n 2 'find . -maxdepth 1 \( -name "*.tmp" -o -name "*~" \) -type f | wc -l'
- -n 2 表示每 2 秒刷新一次(可改为 1、0.5 等,注意太小可能加重 I/O)
- -maxdepth 1 限制只查当前目录,不递归子目录(如需递归,去掉该参数)
- \( ... \) 是 shell 分组语法,必须转义;-o 表示“或”
- 结尾的 | wc -l 统计行数,即匹配文件个数
增强可读性与实用性技巧
让输出更清晰、便于观察波动:
- 加时间戳:watch -n 2 'echo "$(date +%H:%M:%S) — $(find . -maxdepth 1 -name "*.tmp" -type f | wc -l) files"
- 高亮数值变化(watch 自带 -d 参数):watch -n 2 -d 'find . -maxdepth 1 -name "*.tmp" -type f | wc -l',数值变动时会短暂反色
- 排除隐藏文件(如 .git 目录干扰):find . -maxdepth 1 -not -path "./.*" \( -name "*.tmp" -o -name "*~" \) -type f | wc -l
- 若需监控绝对路径(如 /var/log/nginx/temp/),把 . 替换为完整路径即可
替代方案:更轻量或更精准的选择
watch 是简单轮询,适合低频观察;若需实时响应或长期值守,可考虑:
- inotifywait(来自 inotify-tools):真正监听内核事件,无轮询开销,适合脚本集成
- entr:配合 ls 使用,文件列表变化时触发命令(需安装)
- 写简短 shell 脚本 + while sleep 2 循环,便于加入日志记录或阈值告警











