使用 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 来启动监视和输出日志的功能。当指定的文件路径下发生变更时,变更信息将被写入到指定的日志文件中。

posted @ 2023-07-12 17:48  coreylin  阅读(1716)  评论(0编辑  收藏  举报