使用 inotifywait 监控文件变更
coreylin: inotifywait 是什么
【ChatGPT】: inotifywait 是一个 Linux 下的命令行工具,用于监视文件系统的变化。它基于 inotify 机制,可以实时监控文件或目录的变化,并在发生变化时触发相应的动作。它可以监控文件的创建、删除、修改、移动等操作,并提供了丰富的选项和参数,可以根据需要进行定制化配置。inotifywait 可以用于实时监控日志文件、备份文件、配置文件等,可以方便地进行文件同步、备份、自动化处理等任务。
coreylin: 命令参数解析
【ChatGPT】: inotifywait 命令有许多参数可以进行定制化配置,下面是一些常用的参数解析:
-m
或--monitor
:持续监视指定的文件或目录。-r
或--recursive
:递归监视指定目录及其子目录下的文件变化。-e <event>
或--event <event>
:指定要监视的事件类型,可以是多个事件类型组合,如 create、delete、modify、move。-t <seconds>
或--timeout <seconds>
:设置超时时间,超过指定时间后退出监视。-q
或--quiet
:静默模式,不显示监视到的事件信息。-f
或--format <format>
:指定输出的格式,可以选择的格式包括 %w(文件路径)、%f(文件名)、%e(事件类型)、%T(时间戳)等。--exclude <pattern>
:排除指定的文件或目录,支持使用通配符进行匹配。--include <pattern>
:只监视符合指定模式的文件或目录。
除了以上参数,inotifywait 还提供了其他一些选项用于进一步定制化配置,可以通过 man inotifywait
命令查看完整的参数列表和详细说明。
coreylin: 给出一个案例,当文件变更时,输出到日志文件
【ChatGPT】: 以下是一个使用 inotifywait 监视文件变更并将变更信息输出到日志文件的案例:
#!/bin/bash
# 监视的文件路径
WATCH_DIR="/path/to/watch"
# 输出日志文件路径
LOG_FILE="/path/to/log.txt"
# 使用 inotifywait 监视文件变更并输出到日志文件
inotifywait -m -e modify,create,delete,move "$WATCH_DIR" | while read -r directory event file
do
# 获取当前时间
timestamp=$(date +"%Y-%m-%d %H:%M:%S")
# 输出变更信息到日志文件
echo "[$timestamp] $event: $directory/$file" >> "$LOG_FILE"
done
在上述脚本中,首先指定要监视的文件路径和输出日志文件的路径。然后使用 inotifywait
命令监视指定的文件路径,并指定要监视的事件类型为 modify、create、delete、move。通过管道将 inotifywait
的输出传递给 while
循环进行处理,循环中获取当前时间,并将变更信息以特定的格式写入日志文件。
你可以将上述脚本保存为一个文件,比如 watch.sh
,然后在终端中运行 bash watch.sh
来启动监视和输出日志的功能。当指定的文件路径下发生变更时,变更信息将被写入到指定的日志文件中。