Shell-Script

如何根據其他文件的創建日期刪除文件?

  • April 29, 2022

我有一個執行 Linux(busybox 1.32.0)的安全攝像頭,我可以將其設置為在文件夾結構中以(可配置的)30 秒塊連續錄製影片:

recording/2022/04/26/15/2022-04-26-15-30-00.mp4

在另一個文件夾中,僅在檢測到運動時才會記錄靜態圖像:

stills/2022/04/26/15/2022-04-26-15-30-05.jpg

這是我為在檢測到運動之前獲取影片而設計的一種解決方法。

由於可用空間有限,我想刪除在運動前 60 秒和運動後 120 秒以上開始的任何影片,以便為每個靜止圖像保留一些​​前後影片。

靜止圖像可能每 5 秒出現一次,因為它們基於運動觸發而不是預定義的間隔。

當然,對於一個單一的圖像,執行“查找”和適當的選項是一個問題,但是我更複雜的案例呢?

我想了一些可能的方法,但我不確定如何進行。

我考慮過每天執行一個腳本,列出前一天的元素(錄音和靜止圖像),將文件名轉換為每個元素的時間戳,然後迭代地將時間戳與靜止圖像的時間戳進行比較。

這將涉及 4 個列表(文件名、時間戳、錄音和劇照),並且在我看來非常參與(可能是因為我不熟悉 shell 腳本),那麼有沒有更簡單的方法呢?

涉及 python 或 perl 的解決方案需要為平台編譯它,並且可能會給 CPU 帶來過高的負載,更不用說設備上的可用空間已經有限,並且 samba 4.x 執行檔已經無法適應。

可用的工具是busybox 的一部分以及項目網站中列出的二進製文件。

完全不使用時間概念,依賴文件名以及按字母順序排序與按時間排序相同的事實。

第一步:

$ busybox sh
$ target="/2022/04/26"
$ busybox find recording/"$target" stills/"$target" -type f | busybox sort -t/ -k6 |\
busybox grep -B2 -A4 'jpg$' | busybox grep 'mp4$' > keep.txt

find使用文件名的sort參數獲取一段時間內的錄音和靜止圖像。圖片和影片現在按時間排序。grep對於圖片,在任何比賽之前和之後保持線條(使用 -B,-A 看看你想要多少),最後只得到要保留的錄音。

第一個的中間輸出grep是這樣的,之前為 2,之後為 4:

recording/2022/04/26/15/2022-04-26-15-31-30.mp4
recording/2022/04/26/15/2022-04-26-15-32-00.mp4
stills/2022/04/26/15/2022-04-26-15-32-05.jpg
recording/2022/04/26/15/2022-04-26-15-32-30.mp4
recording/2022/04/26/15/2022-04-26-15-33-00.mp4
recording/2022/04/26/15/2022-04-26-15-33-30.mp4
recording/2022/04/26/15/2022-04-26-15-34-00.mp4
--
recording/2022/04/26/15/2022-04-26-15-36-30.mp4
recording/2022/04/26/15/2022-04-26-15-37-00.mp4
stills/2022/04/26/15/2022-04-26-15-37-29.jpg
recording/2022/04/26/15/2022-04-26-15-37-30.mp4
stills/2022/04/26/15/2022-04-26-15-37-34.jpg
recording/2022/04/26/15/2022-04-26-15-38-00.mp4
recording/2022/04/26/15/2022-04-26-15-38-30.mp4
recording/2022/04/26/15/2022-04-26-15-39-00.mp4
recording/2022/04/26/15/2022-04-26-15-39-30.mp4

第二步:

$ busybox find recording/"$target" -type f | busybox grep -vf keep.txt | busybox xargs echo rm

從錄音中排除要保留的文件並刪除其余文件。


筆記:

文件名應該是扁平的,沒有空格和特殊字元,我不知道更多選項是否適用於您的 busybox。對於我安裝並執行命令的版本 1.34,我看到-print0find 和-zsort 存在,但 grep 不-0存在,xargs 也存在。

我們還假設所有記錄都存在於目標期間。但是即使他們不這樣做,我們也不會刪除任何有用的塊,在最壞的情況下我們可以保留更多,例如,如果靜止圖像周圍沒有影片,我們將保留更接近的塊,無論它們何時.

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