每 1 分钟编写一次 sFTP 批量上传脚本

Giz*_*eat 8 linux webcam sftp amazon-web-services

我想在我离开几天的时候用网络摄像头录制我房子的一部分的视频,以确保任何窃贼在他们意识到之前被拍到并将照片上传到我的服务器。

我已经设置了一个网络摄像头来使用 mjpg_streamer 流式传输素材。这有效并且正在流式传输。

只要您想调用 'FileName.jpg' ,就可以从流中获取静态捕获:

wget http://127.0.0.1:8080/?action=snapshot -O FileName.jpg 
Run Code Online (Sandbox Code Playgroud)

我有一个 Amazon FTP 服务器,带有 Amazon Web Services 和使用 sFTP 的 FTP 访问。我目前使用 Firefox 的 FireFTP 插件进行连接,这样就可以了。这个想法是让计算机在连接​​实时运行的情况下运行。

我想编写从流中拍摄图片的脚本,例如每 1 分钟一次,并通过实时 FTP 连接将图片上传到我的服务器,或者从我的 PC 上删除原始文件,以便下一个文件保存 O或者在每个文件的末尾附加一个数字,然后通过 FTP 将其上传。例如文件名1.jpeg、文件名2.jpeg。

我已经在谷歌上搜索了几个小时,虽然有很多关于编写 FTP 上传脚本的帖子,但我找不到任何关于持续上传的内容......即“观看此文件夹,每 1 分钟上传一次内容,然后一分钟后上传上传其中的任何新内容”。

我想我需要一个 bash 脚本:

  • 保留一个计数器,以便每个新创建的文件都有不同的名称
  • 每 30 秒或 1 分钟将该文件名发送到“wget http://127.0.0.1:8080/?action=snapshot -O FileName XX .jpg”
  • 上传文件名XX .jpg 到 FTP 服务器

但我不知道该怎么做!有人可以指导我吗?或者有没有人知道如何处理 FileZilla 或其他东西(无法观看文件夹 AFAIK:https : //forum.filezilla-project.org/viewtopic.php ? t = 41609 ?

Giz*_*eat 1

先生们——非常感谢所有提供帮助的人。在某种程度上,你的所有建议都帮助我达到了最终的结果。因此,我对您的回复给予了全部信任,但在下面发布了我自己的答案,希望对其他人有用。我意识到这通常不是已完成的事情,但在这种情况下,有很多领域可以形成解决方案,所以我将其全部捆绑到下面的一个中。

安装使用AWS S3所需的服务

# > sudo apt-get install python-pip
# > sudo pip install awscli
Run Code Online (Sandbox Code Playgroud)

使用您自己的 Amazon 帐户注册 AWS S3 服务: https: //aws.amazon.com/s3/

通过“访问密钥 --> 创建新访问密钥”为您的用户帐户定义新的访问密钥,并在出现提示时下载 CSV 文件。如果您不这样做,您将无法使用命令行 S3 功能: https: //console.aws.amazon.com/iam/home ?#security_credential

打开 ROOTKEY.CSV 文件并复制并粘贴包含的 AccessKeyID 值和 SecretKey 值(在启动“aws configure”时出现提示),您可以在将 AWS 与 Linux 结合使用之前从命令行启动该配置。

> aws configure
Enter your access key and secret key when asked. You can leave the third and fourth empty or as 'None'. 
Run Code Online (Sandbox Code Playgroud)

测试您是否可以连接并上传带有 example.txt 文件的文件: > aws s3 mv ~/SourceFolder/sample.txt s3://NameOfYourAWSS3Bucket/AFolderYouHaveCreated

按照此处的构建说明下载并安装 mjpg_streamer : https: //github.com/jacksonliam/mjpg-streamer#building--installation 完成后,导航到其文件夹

> cd mjpg_streamer
Run Code Online (Sandbox Code Playgroud)

启动 mjpg 流媒体:

> mjpg_streamer -i "./input_uvc.so -f 15 -r 1280x960" -o "./output_http.so -w ./www"
Run Code Online (Sandbox Code Playgroud)

通过在网络浏览器中访问以下链接来检查它是否正在运行:

http://127.0.0.1:8080/stream.html
Run Code Online (Sandbox Code Playgroud)

使用以下命令获取单个带有日期和时间戳的文件(并将其保存到执行该文件的本地目录中):

> wget http://127.0.0.1:8080/?action=snapshot -O output-$(date +"%Y-%m-%d-%k-%M-%S").jpg
Run Code Online (Sandbox Code Playgroud)

如果在 2016 年 9 月 1 日 22:35 执行,这将在 mjpeg_streamer 文件夹的“www”子文件夹中创建一个名为“output-16-09-01-22-35-30.jpg”的文件。

创建一个新的bash脚本(如MyScript.sh)并赋予其可执行权限,并将底部的内容复制到其中。运行时,它将每 5 秒创建一个带时间戳的 JPEG,直到当前日期成为指定的结束日期。在本例中,它从日期 A 开始,到日期 B 结束。替换为您自己的日期。

将其复制到脚本中,替换相关路径:

#!/bin/bash  
     SOURCE="/home/YourUser/YourSourceFolder"
     DESTINATION="s3://YourS3Bucket/DestinationFolder"
     input_start=2016-8-29
     input_end=2016-9-9
     startdate=$(date -I -d "$input_start") || exit -1
     enddate=$(date -I -d "$input_end")     || exit -1

     d="$startdate"

       while [ "$d" != "$enddate" ]; do 
       sleep 5
         wget "http://127.0.0.1:8080/?action=snapshot" -O output-$(date +"%Y-%m-%d-%k-%M-%S")'.jpg';
         aws s3 mv $SOURCE $DESTINATION --recursive;
       done
Run Code Online (Sandbox Code Playgroud)

欢迎提出改进建议。

此外,您还可以使用以下命令检查 AWS S3 中的存储进度:

aws s3 ls s3://yourbucketname --recursive --human-readable --summarize
Run Code Online (Sandbox Code Playgroud)

我将其放置了两个小时,每 10 秒触发一次,它生成了 74Mb 的上传量。因此,我计算出一周的流量为 6.5Gb,低于包含成本的服务的定价等级,我认为是 8Gb。

再次感谢。