Bash

如何結合 inotify 和 tail 命令列印每個修改文件的最後一行

  • February 17, 2021

我有這個命令,當一個文件在一個具體目錄下被修改(不包括一些路徑)時,它會告訴我:

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

有沒有辦法將此(或類似)命令與 結合起來tail,以便我可以檢索每個修改文件的最後一行?重要的是,此組合輸出文件的路徑和添加的最後一行。

在您的問題中,您說要掃描文件是否已被修改,但在您的命令中沒有指定事件。

所以我的回答將使用該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

Wich 將輸出如下內容:

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

引用自:https://unix.stackexchange.com/questions/634951