在脚本中只执行一次 CURL 命令?

在脚本中只执行一次 CURL 命令?

解释一下,我当前正在监视文件夹中的任何更改,当检测到更改时,它只是通过 rsync 将检测到的文件上传到我的服务器。这是没有任何问题的工作:

#!/bin/bash
time_stamp=$(date +"%B-%d-%Y")
inotifywait -mr /usr/lib/unifi-video/data/videos -e create -e moved_to |
  while read path action file; do
  echo "The file '$file' appeared in directory '$path' via '$action'"
  rsync -avz -e "ssh -p 221" /$path/$file [email protected]:~/"$time_stamp"/ 
done

我在这里找到了大部分脚本:监视文件夹中是否有新文件的脚本?

问题:我尝试将以下 CURL 行添加到上面的脚本中,但由于一次检测到多个文件,它也会多次执行 CURL 行。我正在尝试找到一种方法来防止在检测到多个文件时多次执行 CURL 行?

curl http://textbelt.com/text -d number=XXXXXXX -d "message=Motion Detected";

我尝试将其直接添加为 rsync 命令下的新行,以及在 rsync 命令后使用 && 。两种方法都多次执行 CURL 命令。

我尝试过的示例:

#!/bin/bash
time_stamp=$(date +"%B-%d-%Y")
inotifywait -mr /usr/lib/unifi-video/data/videos -e create -e moved_to |
  while read path action file; do
  echo "The file '$file' appeared in directory '$path' via '$action'"
  rsync -avz -e "ssh -p 221" /$path/$file [email protected]:~/"$time_stamp"/ 
  curl http://textbelt.com/text -d number=XXXXXXX -d "message=Motion Detected";
done

输出示例:

The file 'test30' appeared in directory '/usr/lib/unifi-video/data/videos/' via 'CREATE'
sending incremental file list

sent 39 bytes  received 11 bytes  20.00 bytes/sec
total size is 0  speedup is 0.00

{
"success": true
}

The file 'test31' appeared in directory '/usr/lib/unifi-video/data/videos/' via 'CREATE'
sending incremental file list

sent 39 bytes  received 11 bytes  20.00 bytes/sec
total size is 0  speedup is 0.00

{
 "success": true
}

两个“成功”行表明 CURL 命令已执行两次,每次检测和上传后。

如果我忘记添加任何信息,请告诉我...

答案1

每次更新都运行rsync也是浪费的。当自上次事件以来 0.1 秒内没有任何活动时,以下脚本将运行rsync一次。curl

#!/bin/bash
time_stamp=$(date +"%B-%d-%Y")
inotifywait -mr /usr/lib/unifi-video/data/videos -e create -e moved_to |
while true; do
  T=''
  while read $T path action file; do
    echo "The file '$file' appeared in directory '$path' via '$action'"
    T='-t 0.1'
  done
  rsync -avz -e "ssh -p 221" /usr/lib/unifi-video/data/videos/ [email protected]:~/"$time_stamp"/ 
  curl http://textbelt.com/text -d number=XXXXXXX -d "message=Motion Detected"
done

答案2

你看过吗同步?它与您手动设置的内容几乎相同,只是它作为正确的服务运行。

相关内容