在Linux系统中实时监控文件和目录变化有利于开发调试、日志分析、自动化脚本触发等应用。fswatch属于跨平台的文件更改监视器,出现在指定文件/目录被修改/更改时,会有通知警报。fswatch可以更高效追踪文件或目录的创建、修改、删除等事件。下面华纳云分享是关于fswatch功能介绍、安装方法和应用场景。
Fswatch支持Linux、macOS和BSD,提供统一命令行接口。支持监控多种事件类型,如文件内容修改、文件属性变更、文件目录创建或删除、文件移动等。可以利用递归监视整个目录树变化来达到效果。Fswatch可用于正则表达式排除或包含特定文件/目录。输出格式支持默认文件、JSON等格式,便于和其他工具集成。
Fswatch的安装可以通过包管理器来安装,Debian/Ubuntu:
sudo apt-get install fswatch
RHEL/CentOS:
sudo yum install fswatch
macOS(Homebrew):
brew install fswatch
如果想从源代码编译安装:
git clone https://github.com/emcrisostomo/fswatch.git
cd fswatch
./autogen.sh && ./configure && make
sudo make install
Fswatch的使用语法,如果是监控单个目录:
fswatch /path/to/directory
默认每秒检测一次变化,输出时间路径和类型。
如监控指定事件类型,只监控文件的创建和删除事件:
fswatch -e Created -e Removed /path/to/dir
递归监控子目录:
fswatch -r /path/to/parent_dir
自定义输出格式如JSON:
fswatch -0 -x -o json /path/to/dir
同其他工具结合使用,如rsync,当源目录变化时自动触发远程同步:
fswatch -r /source/dir | xargs -I{} rsync -avz /source/dir user@remote:/dest/dir
也可以用于排除特定文件/目录,如排除全部.tmp文件,只监控.log文件:
fswatch --exclude ".*\.tmp$" --include ".*\.log$" /path/to/dir
设置监控延迟:
fswatch -l 2 /path/to/dir # 设置检测间隔为 2 秒
持续监控和记录日志:
fswatch -r -o /path/to/dir >> file_changes.log
常应用于前端开发热重载,
监控 src 目录变化后自动触发构建:
fswatch -r ./src | xargs -I{} npm run build
用来实时分析日志,当日志更新时显示最新10条内容:
fswatch /var/log/nginx/access.log | xargs -I{} tail -n 10 {}
自动备份配置文件:
fswatch ~/.config/app | while read path; do cp "$path" /backup/; done
使用过程中有一些注意事项,如避免用来监控过大的目录树或高频变化的文件;要确保用户对目标路径有读取权限;批量操作可能触发大量事件,建议添加去抖逻辑。当处理场路径输出结果可能会有换行符号,建议 -0 参数配合 xargs -0。