请使用此脚本提供一点帮助:
#!/bin/bash
WATCH_DIR="/home/media/Movies"
# Comanda FileBot
FILEBOT_CMD="filebot -rename -r -non-strict \"$WATCH_DIR\" --db TheTVDB --format \"{n}/Season {s}/{n} - {s00e00} - {t}\" --action move --order Airdat"
# Monitorizeaza modificarile
inotifywait -m -r -e close_write "$WATCH_DIR" --format '%w%f' |
while read file; do
echo "New Change: $file"
eval $FILEBOT_CMD
done
此脚本检测文件是否打开以写入(修改)以及何时关闭文件写入(close_write),一切都很好,它正在工作,但我希望仅在所有文件完成后才加载脚本,之后5 秒内没有触发其他事件。有什么解决办法吗?
所以,如果我复制 5 个文件,我不希望脚本运行 5 次,相反,我希望脚本等到所有文件完成复制过程,然后只运行一次。检测是否在 5 秒内没有触发任何事件,然后仅运行一次 filebot 操作...无论文件大小如何,都应该发生这种情况。
提前谢谢您
一种方法是不使用监视模式 (
-m
),而是让 inotifywait
在发生单个事件时退出,然后使用 inotifywait
选项以 5 秒超时重新调用 -t
并检查退出状态。如果发生事件,它将退出,并显示 0
;如果超时,则显示 2
(如果出现错误,则显示 1
)。然后,您的监控脚本可以循环重复该过程。
示例:
waitFor5SecondsSilence() {
local ev=0
while [[ $ev -eq 0 ]]; do
inotifywait -t 5 -r -e close_write "$WATCH_DIR" --format '%w%f'
ev=$?
done
}
# Monitorizeaza modificarile
while true; do
inotifywait -r -e close_write "$WATCH_DIR" --format '%w%f'
waitFor5SecondsSilence
eval "$FILEBOT_CMD"
done