gpt4 book ai didi

linux - 在 linux 上使用 expect 和 inotifywait 观察文件夹中的变化

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:25:47 25 4
gpt4 key购买 nike

我最初想要一个脚本,当我在我的 PC 中插入 USB 内存棒时运行,然后在它被移除时运行另一个脚本,我弄乱了 udev 但没有成功,所以这显然不是最好的选择,我然后遇到了 inotifywait,当我的驱动器被安装时,我可以看到一个文件夹,因为这会给我 CREATE,ISDIR myfolder 输出我正在寻找,但是使用它来实际触发外部脚本有点超出我的编程范围技能,我看过 EXPECT 但看不到如何完成我的任务,我想基本上我需要创建一个遵循下面所示流程的 expect 脚本

Expect spawns the inotifywait process
expect then starts a loop
if the loop sees "CREATE,ISDIR test" then run script active.sh
if the loop sees "DELETE,ISDIR test" then run scrip inactive.sh
Loop

可能有一种更简单的方法可以做到这一点,但我到处搜索并尝试了各种不同的组合,简而言之,我希望在创建某个文件夹时运行一个脚本,然后在删除该文件夹时运行另一个脚本,有没有一种简单的方法可以做到这一点?

最佳答案

您只需要生成进程并等待所需的词。就这样。

#!/usr/bin/expect
# Monitoring '/tmp/' directory
set watchRootDir "/tmp/"
# And, monitoring of folder named 'demo'
set watchFolder "demo"

puts "Monitoring root directory : '$watchRootDir'"
puts "Monitoring for folder : '$watchFolder'"

spawn inotifywait -m -r -e create,delete /tmp
expect {
timeout {puts "I'm waiting ...";exp_continue}
"/tmp/ CREATE,ISDIR $watchFolder" {
puts "Folder created"
# run active.sh here ...
exp_continue
}
"/tmp/ DELETE,ISDIR $watchFolder" {
puts "Folder deleted"
# run inactive.sh here ...
}
}
# Sending 'Ctrl+C' to the program, so that it can quit
# gracefully.
send "\003"
expect eof

输出:

dinesh@myPc:~/stackoverflow$ ./Jason 
Monitoring root directory : '/tmp/'
Monitoring for folder : 'demo'
spawn inotifywait -m -r -e create,delete /tmp
Setting up watches. Beware: since -r was given, this may take a while!
Watches established.
I'm waiting ...
I'm waiting ...
/tmp/ CREATE,ISDIR demo
Folder created
I'm waiting ...
/tmp/ DELETE,ISDIR demo
Folder deleted

在生成 inotifywait 时,我添加了更多选项。 -m 标志用于持续监控,默认情况下 inotifywait 将在第一个事件时退出,-r 表示递归或检查子目录

我们需要指定 -e 标志以及我们希望收到通知的事件列表。所以,在这里,我们要监控文件夹的createdelete 事件。

引用:inotifywait

关于linux - 在 linux 上使用 expect 和 inotifywait 观察文件夹中的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35366871/

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