我编写了一个 bash 脚本来保存直播流中的图像。直播流 URL 是一个更新的 jpeg 文件,因此我编写了一个变量来根据纪元生成文件名。该脚本做了两件事,希望有人能帮我解释清楚。首先,使用 filename 变量保存的图像不能作为图像读取。
第二,有文件保存,但是名字不是我想要的。
脚本来源为:
#!/bin/bash
while true; do
date=`date +%s`
ext=.jpg
fname=$date$ext
wget http://rawcam.ele.uri.edu/tmpfs/image.jpg -o $fname
sleep 100
done
and here is output:
$ ls
1489453852.jpg 1489453964.jpg image.jpg image.jpg.5 uri.sh
1489453951.jpg 1489453968.jpg image.jpg.1 image.jpg.6
1489453954.jpg 1489453971.jpg image.jpg.2 image.jpg.7
1489453958.jpg 1489453975.jpg image.jpg.3 image.jpg.8
1489453961.jpg 1489453978.jpg image.jpg.4 image.jpg.9
我做错了什么?我只想每隔几秒保存一次文件 image.jpg,文件名作为发生时的纪元。
答案1
正如@steeldriver 所解释的那样,输出文件的选项需要大写O
。在脚本中处理文件名和其他字符串时,一般来说,最好将它们放在引号内以确保安全。这可以避免 shell 意外执行某些操作。修改后的脚本版本为:
#!/bin/bash
while true; do
date=`date +%s`
ext=".jpg"
fname="$date$ext"
wget http://rawcam.ele.uri.edu/tmpfs/image.jpg -O "$fname"
sleep 100
done
当时发生的情况是,.jpg
使用带有 的纪元来创建文件名,该文件名用作该wget
命令运行的日志文件。wget
它本身正在下载image.jpg
文件,为了防止“破坏”* 之前的下载,在每个名称后添加了递增的数字,以 为单位.1
。
*clobbering 是指新文件覆盖具有相同名称的现有文件。