gpt4 book ai didi

linux - shell 脚本在文件中的每个新行中触发一个命令?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:39:05 28 4
gpt4 key购买 nike

是否可以在文件中的每个新行触发一个命令?

例如:我有一个日志文件说 maillog。我想将每个新条目作为邮件发送到日志文件中。

如果像“Mail Sent”这样的新条目添加到 maillog 文件中,那么我的脚本应该 grep 新条目并向我发送一封包含条目(数据)的邮件。

我知道这很疯狂,但我想用这些东西自动化我的 Linux 机器。

问候,

最佳答案

没那么疯狂。通过存储文件的原始长度定期(每小时一次,每天一次,你喜欢什么)检查文件中的新部分,比较长度,如果它增加了,处理附加的部分:

length=0
while sleep 3600 # use wanted delay here
do
new_length=$(find "$file" -printf "%s")
if [ $length -lt $new_length ]
then
tail --bytes=$[new_length-length] "$file" | handle_part
fi
length=$new_length
done

现在您只需编写 handle_part 函数,例如可以将其输入邮寄到某处。

使用这种方式(而不是明显的 tail -f)的优点是您可以将当前长度存储到一个文件中,稍后在重新启动脚本时再次读取该长度。因此,您不会在脚本重启后获得整个文件(例如,由于机器重启)。

如果您想要更快的响应,您可以查看 inotify,它是 Linux 上用于监视文件操作的工具;这样轮询就可以被取代。

关于linux - shell 脚本在文件中的每个新行中触发一个命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18892411/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com