Bash 延迟批处理监视目录树(inotifywait)中的文件

Bash 延迟批处理监视目录树(inotifywait)中的文件,bash,batch-processing,inotifywait,Bash,Batch Processing,Inotifywait,有一个目录树,由inotifywait监视。我想做的是延迟(例如10秒)触发一个脚本(例如,我可以用它从中移动文件),这样该脚本不会在任何事件中触发,而是在“groupped”事件中触发 批处理脚本(是较大脚本的一部分,在末尾发送电子邮件等)将文件移动到另一个目录的相应目录manage_all.sh: #!/bin/bash TEMPDIR="/mnt/foo/temp" QUEUEDIR="/mnt/foo/queue" SLOTSLEFTINQUEUE=5 for FILEPATH in

有一个目录树,由
inotifywait
监视。我想做的是延迟(例如10秒)触发一个脚本(例如,我可以用它从中移动文件),这样该脚本不会在任何事件中触发,而是在“groupped”事件中触发

批处理脚本(是较大脚本的一部分,在末尾发送电子邮件等)将文件移动到另一个目录的相应目录
manage_all.sh

#!/bin/bash
TEMPDIR="/mnt/foo/temp"
QUEUEDIR="/mnt/foo/queue"
SLOTSLEFTINQUEUE=5

for FILEPATH in $(ls -1tr $(find "$TEMPDIR" -type f -iname \*.txt) | head -n$SLOTSLEFTINQUEUE) ; do 
   FILESUBPATH="${FILEPATH#$TEMPDIR/}"
   mv -f "$FILEPATH" "$QUEUEDIR/$FILESUBPATH"
done
现在每5分钟在cron中运行一次,效果非常好。但我想使用inotifywait,而不是再等5分钟。 我已经试过了,但效果不好,因为它会在每个事件中触发
manage_all.sh
脚本:

(echo start; inotifywait -mr -e close_write,moved_to,modify "/mnt/foo/temp") | while read line; do ./manage_all.sh; done
是否可以(不重写脚本)将每10秒只触发一次脚本的“事件分组在一起”


谢谢

那是
bash
而不是
batch
。事实上,它甚至不是
bash
,它的
sh
正在替换inotifywait调用一个while循环,每次睡眠10秒,一个选项?这样你就可以编写一个脚本,每天停止睡眠一次,然后通过cron重新启动。@JID:谢谢,我已经更正了。但我想指出的是,我们可以在bash中使用特性(甚至在v4.x中)。沃尔特A:这不是一个理想的选择,因为内部脚本每10秒运行一次。