Filenames

創建一個新文件,但如果文件名已經存在,則添加一個數字

  • October 8, 2018

是否可以從命令行實現這一點?

語法:我可以使用以下命令擷取圖像:

raspistill -o image.jpg

但我希望能夠每分鐘通過 cron 執行這個命令並得到這樣的東西

image1.jpg、image2.jpg、image3.jpg 等…

#!/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.

如果您不介意後綴值,只要圖像按數字升序排列,您就可以使用日期和時間

raspistill -o "$(date --utc +'image%Y%m%d%H%M.jpg')"

如果需要,延長%S幾秒鐘。

如果您確實打算將其添加為單行,請記住這%crontab條目中的特殊字元。要麼迴避這個問題,把它放在一個(非常短的)腳本中,然後從 呼叫腳本cron,或者在每個腳本前面%加上一個反斜杠\。詳情請參閱man 5 crontab(搜尋%)。

引用自:https://unix.stackexchange.com/questions/473630