创建一个新文件,但如果文件名已存在则添加一个数字

创建一个新文件,但如果文件名已存在则添加一个数字

是否可以通过命令行实现此目的?

语法:我可以使用以下命令捕获图像:

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.

相关内容