如何将 inotify 与 tail 命令结合起来打印每个修改文件的最后一行

如何将 inotify 与 tail 命令结合起来打印每个修改文件的最后一行

我有这个命令,它显示了具体目录(不包括某些路径)下的文件被修改的情况:

inotifywait -m -q -r --format '%T % e %w%f' --excludei '/trash/' --timefmt '%d/%m/%Y-%H:%M:%S%z' /my/monitored/folder

有没有办法将此(或类似)命令与 结合起来tail,以便我可以检索每个修改文件的最后一行?重要的是,此组合输出文件的路径和添加的最后一行。

答案1

在你的问题中,你说你想扫描文件是否已被修改的,但在您的命令中没有指定事件。

所以我的答案将使用该modify事件:

inotifywait -m -q -r \
  --format '%T % e %w%f' \
  --excludei '/trash/' \
  --timefmt '%d/%m/%Y-%H:%M:%S%z' /my/monitored/folder | \
   while IFS=' ' read -r time event file; do
    echo "file: $file"
    echo "modified: $time"
    last_line=$(tail -1 "$file")
    echo "last line: $last_line"
    echo
  done

它将输出类似这样的内容:

file: /path/file.txt
modified: 17/02/2021-09:17:02-0300
last line: foo

相关内容