他のファイルの作成日に基づいてファイルを削除する方法は?

他のファイルの作成日に基づいてファイルを削除する方法は?

監視装置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つのリスト(ファイル名、タイムスタンプ、録音、およびスチール)が含まれます。これを行うより簡単な方法はありますか?

PythonまたはPerlに関連するソリューションはプラットフォームに合わせてコンパイルする必要があり、デバイスの空き容量がすでに制限されており、Samba 4.x実行可能ファイルがもはや適切ではないことは言うまでもなく、CPUに過度のロードを加える可能性があります。

利用可能なツールは利用可能なツールです。ビジーボックスの一部さらに、リストされたバイナリプロジェクトウェブサイト

答え1

時間の概念をまったく使用せずにファイル名に基づいてアルファベット順にソートすることは、時間順にソートするのと同じです。

最初のステップ:

$ 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

一定期間録画および静止画を取得しますfindsortパラメーターはファイル名です。これで、写真とビデオが時間で並べ替えられます。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

ステップ2:

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

録音からアーカイブしたいファイルを除き、残りのファイルを削除してください。


メモ:

ファイル名はスペースや特殊文字なしで単純でなければなりません。あなたのビジボックスでより多くのオプションが機能するかどうかわかりません。コマンドをインストールして実行したバージョン1.34では、-print0findと-zsortがありますが、grepやxargsはありません-0

また、目標期間中にすべての録音が存在すると仮定します。しかし、そうでなくても、私たちは役に立つチャンクを取り除かず、最悪の場合、より多くのチャンクを維持することができます。たとえば、静止画の周囲にビデオがない場合は、いつ表示されるかに関係なく、より近いチャンクを維持します。

答え2

シェルスクリプトを使用すると確かに可能ですが、Pythonを使用すると簡単です。ディレクトリ内のすべてのファイルをインポートできるPythonのosモジュールを確認してください。

次に、ファイル名を正規表現と比較し、不要なファイルを削除するだけです。

関連情報