![创建一个新文件,但如果文件名已存在则添加一个数字](https://linux22.com/image/140207/%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E6%96%B0%E6%96%87%E4%BB%B6%EF%BC%8C%E4%BD%86%E5%A6%82%E6%9E%9C%E6%96%87%E4%BB%B6%E5%90%8D%E5%B7%B2%E5%AD%98%E5%9C%A8%E5%88%99%E6%B7%BB%E5%8A%A0%E4%B8%80%E4%B8%AA%E6%95%B0%E5%AD%97.png)
是否可以通过命令行实现此目的?
语法:我可以使用以下命令捕获图像:
raspistill -o image.jpg
但我希望能够每分钟通过 cron 运行这个命令并得到类似的东西
image1.jpg、image2.jpg、image3.jpg 等...
答案1
如果您不介意后缀值,只要图像按升序排列,您可以使用日期和时间
raspistill -o "$(date --utc +'image%Y%m%d%H%M.jpg')"
%S
如果需要,可延长几秒钟。
如果您确实打算将其添加为一行,请记住这%
是条目中的特殊字符crontab
。要么回避问题并将其放入(非常短的)脚本中并从 调用该脚本cron
,要么在每个脚本前面加上%
反斜杠\
。详细信息请参见man 5 crontab
(搜索%
)。
答案2
#!/bin/sh
num=1
outfile="image$num.jpg"
while [ -e "$outfile" ]; do
num=$(( num + 1 ))
outfile="image$num.jpg"
done
raspistill -o "$outfile"
上面脚本中的循环会将num
变量加一,并outfile
使用该数字创建一个新的输出文件名,直到找到未采用的文件名。
如果同时运行脚本的多个副本,这可能会失败,因为测试文件名是否存在和创建新文件之间存在竞争条件。以一分钟的间隔运行脚本应该不会有问题,除非raspistill
创建新文件需要一分钟或更长时间。在这种情况下,请touch "$outname"
在循环后添加以尽快“声明”文件名(但同时调用脚本可能仍会失败)。
我所说的“失败”是指使用以下命令对脚本进行两次或多次调用相同的文件名以raspistill
.