linux如何监控文件变化

2023-09-12 13:56:14 浏览数 (1)

安装

代码语言:javascript复制
sudo apt update
sudo apt install inotify-tools

监听/usr/local/src 目录

代码语言:javascript复制
inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w %f %e' -e modify,delete,create,attrib  /home/xj/tmp

参数:

  • • -m 持续监听
  • • -r 使用递归形式监视目录
  • • -q 减少冗余信息,只打印出需要的信息
  • • -e 指定要监视的事件,多个时间使用逗号隔开
  • • –timefmt 时间格式
  • • –format 监听到的文件变化的信息
  • • –timefmt 说明:
  • • ymd分别表示年月日,H表示小时,M表示分钟

–format说明:

执行上面的命令之后,在监听的目录下创建一个1.txt文件,得到如下结果:

代码语言:javascript复制
22/03/18 17:22 /usr/local/src/ 1.txt CREATE
22/03/18 17:22 /usr/local/src/ 1.txt ATTRIB

这个脚本的功能是循环监听文件或目录的增删改事件,当事件发生执行设置的脚本文件。

代码语言:javascript复制
优化这个脚本,当监控的文件有有增删改时,出发一个脚本语句

#!/bin/sh

filename=$1
script=$2

inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w %f %e' -e modify,delete,create $filename
do

        MODIFY|CREATE|DELETE)
            bash $script ;;

done
代码语言:javascript复制
#!/bin/bash

filename=$1
script=$2

while inotifywait -r -q -e modify,delete,create "$filename"; do
    bash "$script"
done

shell脚本后台执行

nohup

使用nohup,其中test.sh为所执行的脚本,out.txt为输出信息的地方。

代码语言:javascript复制
echo "echo 'xiaojing' >> good.txt" > todo.sh #假设执行的脚本是这样子
nohup bash test.sh /home/xj/tmp 'todo.sh' > out.txt &

我有个大胆的想法

小伙伴在平常有没有遇到以下这种情况:遇到技术难题时,网上教程一堆堆,优秀的很多,但也有很多是过时的,或者是copy来copy去,甚至错别字都没改。

0 人点赞