使用 wget 保存连续文件以及重命名文件扩展名

使用 wget 保存连续文件以及重命名文件扩展名

我运行一个 cron 作业,请求从本地地址的远程网络摄像头拍摄快照:

wget http://user:[email protected]/snapshot.cgi

每次运行时都会创建文件snapshot.cgi、、、snapshot.cgi.1snapshot.cgi.2

我希望的结果是文件的名称类似于file.1.jpg, file.2.jpg。基本上,按顺序或日期/时间命名的文件,并使用正确的文件扩展名,而不是.cgi

有任何想法吗?

答案1

你可能要折磨 wget 才能做到这一点,但何必呢?试试

wget http://user:[email protected]/snapshot.cgi
mv snapshot.cgi snapshot-`date +%Y-%m-%d-%H%M%S`.jpeg

这应该会创建带有日期和时间戳的图像,如snapshot-2011-04-12-081649.jpeg。这样可以吗?

编辑:好的,不需要太多折磨:

wget -O snapshot-`date +%Y-%m-%d-%H%M%S`.jpeg http://user:[email protected]/snapshot.cgi

但我大部分还是喜欢使用小型、独立的工具的 UNIX 方式来完成这件事。

答案2

您可以使用简单的 bash 循环和-Owget 中的选项来完成此操作。

像这样:

i=0
while 1
do
  # increment our counter
  ((i++))
  # get the file and save it
  wget -O file.$i.jpg http://user:[email protected]/snapshot.cgi
  # presumably you want to wait some time after each retrieval
  sleep 30
done

一个明显的烦恼是,如果目录中已经有 file.1.jpg 并且您启动此脚本,它将被覆盖。为了解决这个问题,您首先需要找到所有现有的 file.N.jpg 文件,找到 N 的最大值,然后从 N+1 开始。这是一个难以置信愚蠢的方法来做到这一点:

# find the last sequential file:
i=$(ls -t file.*.jpg | head -1 | awk -F. '{ print $2}') 
# if there weren't any matching files, force $i to 0
[ $i > 0 ] || i=0
# increment by one to get your starting value for $i
((i++))
# and then start your capture mechanism
while 1
do
  # increment our counter
  ((i++))
  # get the file and save it
  wget -O file.$i.jpg http://user:[email protected]/snapshot.cgi
  # presumably you want to wait some time after each retrieval
  sleep 30
done

我真的应该将整个过程重写为 perl 单行代码,但我很累而且时间很晚了,所以我会偷懒。无论如何,这应该能让您了解如何使用简单的 shell 脚本机制来实现这一点。

相关内容