Filenames
創建一個新文件,但如果文件名已經存在,則添加一個數字
是否可以從命令行實現這一點?
語法:我可以使用以下命令擷取圖像:
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
(搜尋%
)。