gpt4 book ai didi

linux - 查看目录中的新文件,然后运行脚本

转载 作者:太空狗 更新时间:2023-10-29 11:18:02 26 4
gpt4 key购买 nike

我想在 Ubuntu 14.04 中监视一个目录,当在这个目录中创建一个新文件时,运行一个脚本。

特别是我有安全摄像头,当它们检测到运动时,通过 FTP 上传捕获的视频。我想在此 FTP 服务器上运行脚本,以便在创建新文件时立即将它们镜像(上传)到云存储服务,这是通过我已经编写的脚本完成的。

我发现 iWatch 让我可以做到这一点 ( http://iwatch.sourceforge.net/index.html ) - 我遇到的问题是 iwatch 会在文件在 FTP 目录中创建的那一刻立即启动云上传脚本,即使文件正在处理中仍在上传。这会导致云同步脚本上传 0 字节的文件,对我没用。

也许我可以在云上传脚本中添加一个“等待”,但它看起来很老套,而且无法预测要等待多长时间,因为它取决于文件大小、网络条件等。

执行此操作的更好方法是什么?

最佳答案

尽管评论中提到了 inotifywait,但完整的解决方案可能对其他人有用。这似乎有效:

 inotifywait -m -e close_write /tmp/upload/ | gawk '{print $1$3; fflush()}' | xargs -L 1 yourCommandHere

将运行

  yourCommandHere /tmp/upload/filename

关闭新上传的文件时

注意事项:

  • inotifywait 是 Ubuntu 中的 apt 包 inotify-tools 的一部分。它使用内核 inotify 服务来监视文件或目录事件
  • -m 选项是监控模式,每个事件输出一行到标准输出
  • -e close_write 用于打开以进行写入的文件的文件关闭事件。文件关闭事件有望避免收到不完整的文件。
  • /tmp/upload 可以换成其他目录来监控
  • gawk 的管道重新格式化 inotifywait 输出行以删除第二列,这是事件类型的重复。它将第 1 列中的目录名与第 3 列中的文件名组合成一个新行,每行刷新一次以消除缓冲并鼓励 xargs
  • 立即采取行动
  • xargs 获取文件列表并为每个文件运行给定命令,并在命令末尾附加文件名。 -L 1 使 xargs 在标准输入接收到每一行后运行。

关于linux - 查看目录中的新文件,然后运行脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34957484/

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