我有一個網路攝像頭,它每隔幾分鐘通過 FTP 將影像上傳到一個目錄中。不幸的是,網路攝像頭有一個錯誤,它一次上傳兩個影像。(供應商不想修復它......)。影像仍然不同,所以我無法檢查 .jpg 的 md5sum 并洗掉重復的。
影像的檔案名相似,但仍然不同。它看起來像這樣:
- 一月 3 日 09:43 image220103_094305_20.jpg
- 一月 3 日 09:43 image220103_094306_00.jpg
格式如下:
imageYYMMDD_HHMMSS_??.jpg
我的目標是保留第一個上傳的圖片并洗掉第二個。
我的想法是使用“stat”并檢查修改時間。但是,stat 非常詳細,甚至會顯示上傳時的秒數。所以我的問題是:
是否可以將修改的時間限制為分鐘?我不在乎秒數或更遠。
如果兩張圖片在 09:43 上傳,我想洗掉最后一張。
bash 腳本將每小時通過 crontab 執行一次。
我的方法是:
- 列出目錄中的所有檔案及其修改時間,僅限于分鐘(不顯示秒)
- 如果有修改時間相同的檔案,洗掉最后一個結果
uj5u.com熱心網友回復:
這是一個簡單的腳本,用于洗掉相隔不到一分鐘的檔案,假設檔案名按時間戳排序。
prev=0
for file in /path/to/files/*; do
timestamp=$(stat -c %Y -- "$file")
if ((timestamp - prev < 60)); then
rm -- "$file"
else
prev=$timestamp
fi
done
shell 將通配符擴展為*按字母順序排列的串列;我假設這足以確保大約在同一時間上傳的任何兩個檔案都會一個接一個地結束。
的引數stat依賴于系統;在 Linux 上,-c %Y生成自紀元以來檔案的最后修改時間(以秒為單位)。
本--不應該是必要的,因為只要通配符擁有國內領先的路徑,但我把它劃入萬一“腰帶和背帶”的解決方案,你想通配符更改為其他內容。(不過,./在任何相對路徑之前添加可能是一個好主意,然后再次確保--不需要。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/403465.html
標籤:
