inotifywait

安装和基本使用

https://blog.csdn.net/qq_37788558/article/details/104985262

参数重点:

  • -m 默认情况下inotifywait发现一个事件就退出了。m可以持续观测并输出
  • -r 递归观测目录
  • -q 不输出乱七八糟的提示信息,这个在使用linux管道时候需要加上,否则管道后面会受到格式不可预测的文本输出
  • -d, -o 作为后台进程运行,并且输出到一个文件里
  • -c 输出格式为csv
  • -e 对哪些事件感兴趣,列在后面,用逗号隔开。事件是预定义的。有哪些查一下本文后面的手册。
  • --timefmt 定义一下命令最终输出内容里的时间格式
  • --format这个地方定义了输出的格式,可以把 --timefmt里定义的时间使用%T包含进来输出。 和-c参数为互斥
  • %w 发生事件的目录
  • %f 触发事件的文件
  • %e 发生的事件
  • %T 发生的时间
  • %Xe 如果多个事件发生,用X分割

示例

inotifywait -m /path -e create -e moved_to |
    while read directory action file; do
        if [[ "$file" =~ .*xml$ ]]; then # Does the file end with .xml?
            echo "xml file" # If so, do your thing here!
        fi
    done

笔记

$ inotifywait -mrq --timefmt "%y-%m-%d/%H:%M:%S" --format "%T '%w%f' %e" -e  CLOSE_WRITE   /home/smallfile/monitor_dir/

上述命令 -m让命令一直监控,除非被强制退出

r 监控子目录

q 不要输出无关提示信息,可以参考下面两段命令做个对比。

没有使用-q的时候:

[~smallfile]$ inotifywait -mr --timefmt "%y-%m-%d/%H:%M" --format "%T '%w%f' %e" -e  CLOSE_WRITE   /home/smallfile/monitor_dir/
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
22-08-06/14:51 '/home/smallfile/monitor_dir/a.txt' CLOSE_WRITE,CLOSE
22-08-06/14:51 '/home/smallfile/monitor_dir/a' CLOSE_WRITE,CLOSE
22-08-06/14:51 '/home/smallfile/monitor_dir/b' CLOSE_WRITE,CLOSE
22-08-06/14:51 '/home/smallfile/monitor_dir/c' CLOSE_WRITE,CLOSE
22-08-06/14:51 '/home/smallfile/monitor_dir/d' CLOSE_WRITE,CLOS

使用了-q之后

[~smallfile]$ inotifywait -mr --timefmt "%y-%m-%d/%H:%M" --format "%T '%w%f' %e" -e  CLOSE_WRITE   /home/smallfile/monitor_dir/
22-08-06/14:51 '/home/smallfile/monitor_dir/a.txt' CLOSE_WRITE,CLOSE
22-08-06/14:51 '/home/smallfile/monitor_dir/a' CLOSE_WRITE,CLOSE
22-08-06/14:51 '/home/smallfile/monitor_dir/b' CLOSE_WRITE,CLOSE
22-08-06/14:51 '/home/smallfile/monitor_dir/c' CLOSE_WRITE,CLOSE
22-08-06/14:51 '/home/smallfile/monitor_dir/d' CLOSE_WRITE,CLOS

示例

inotifywait -mrqc   -e  CLOSE_WRITE   /home/smallfile/monitor_dir/ | while read info; do echo ${info};done

#最后我用了一个方法,可以控制并发:
inotifywait -mrqc   -e  CLOSE_WRITE   /home/smallfile/monitor_dir/  | xargs -I% -P5 ./exe.sh %   #其中exe.sh是一个脚本,执行文件的copy的工作。

inotifywait -mrqc   -e  CLOSE_WRITE   /home/smallfile/monitor_dir/  | parallel --jobs 3 ./exe.sh {%}  {1}

参考

inotifywait替代品

build:   __BUILD_VERSION__