1

CRON によって実行される ET9000 Sat-Receiver の録音を自動クリーニングするスクリプトを作成しました。

録画内のファイルの古い X-Days をクリーンアップするスクリプトを既に実行しています...しかし、私はそれを認識しました

find /media/hdd/Serien/my_fav_series/ -mtime +5

は十分に効率的ではなく、1 つの録音で生成される 4 ~ 6 個のファイルのいくつかは異なる年代を持っています...そして、それらが X 日よりも古いものであっても、常にいくつかの録音が残っていることを確認したいのです!

だからここに私がこれまでに持っているものがあります:

#!/bin/bash

DIR=$1
TS=$2
REC=$((TS * 6))
RECS=$((TS + 1))
FILES=$(ls /media/hdd/Serien/$DIR/|egrep '\.ts$'|wc -l)
DATE=$(date +"%Y-%m-%d %H:%M")

if [ $FILES -gt $TS ];
then

ls -ct /media/hdd/Serien/$DIR/|egrep '\.ts$'|tail -n+$TS > /tmp/del.lst

cd /media/hdd/Serien/$DIR

#cat /tmp/del.lst|xargs -0 rm
while IFS= read -r file
do
rm -- "$file"
done < /tmp/del.lst

cd -
rm /tmp/del.lst

echo "$DATE - $DIR - Saved the $RECS newest records & deleted older records in folder" >> /media/hdd/backup/cleanup.log
else
echo "$DATE - $DIR - Less then $TS records in folder" >> /media/hdd/backup/cleanup.log
fi

期待どおりに機能し、パラメーターで指定された量を維持しながら、最も古い *.TS ファイルを削除します...

しかし、それはまだ私が望むほど知的ではありません! 私がまだ必要としているのは、すべての残り物を削除する追加です。残り物とは、レコードの一部を消費するスペースではないことを意味します。

20121221 1628 - ProSieben HD - How I Met Your Mother.ts
20121221 1628 - ProSieben HD - How I Met Your Mother.ts.ap
20121221 1628 - ProSieben HD - How I Met Your Mother.ts.cuts
20121221 1628 - ProSieben HD - How I Met Your Mother.ts.sc

これがクリーンアップされた後、*.AP、*.CUTS、*.SC、および *.META がディレクトリに残されます。そして、対応する *.TS を持たないすべてのファイルを em で削除する関数を作成する方法がわかりません...

編集:

ls -ct /media/hdd/Serien/How_I_met_your_mother/

20130102 1600 - ProSieben HD - How I Met Your Mother.ts.meta
20130102 1600 - ProSieben HD - How I Met Your Mother.ts
20130102 1600 - ProSieben HD - How I Met Your Mother.ts.ap
20130102 1600 - ProSieben HD - How I Met Your Mother.ts.cuts
20130102 1600 - ProSieben HD - How I Met Your Mother.ts.sc
20130102 1600 - ProSieben HD - How I Met Your Mother.eit

20130102 1141 - ProSieben HD - How I Met Your Mother.ts.ap
20130102 1141 - ProSieben HD - How I Met Your Mother.ts.cuts
20130102 1141 - ProSieben HD - How I Met Your Mother.ts.sc
20130102 1141 - ProSieben HD - How I Met Your Mother.eit
20130102 1114 - ProSieben HD - How I Met Your Mother.eit

「ls -ct」出力の最初の 6 行は、まだ消去されていない完全な記録を示しています。5 つのファイルのみを示す 2 番目のセットは、既に削除されたレコードの残り物です。

私が必要としているのは、その最初の日付と時刻のパターンを認識し、グループ内のものを並べ替えて、そのグループに *.TS ファイルが含まれているかどうかを確認し、削除されていない場合はグループの残りの部分を削除する機能です。

お役に立てれば幸いです。

グリーツ・ミルコ

4

2 に答える 2

0

あなたの編集に基づいて、別のアイデアがあります。

  1. そこにある形式を使用して、すべてのファイル名をテキストファイル(ファイルA)にダンプします。

    20130102 1600 - ProSieben HD - How I Met Your Mother.ts.meta
    20130102 1600 - ProSieben HD - How I Met Your Mother.ts
    20130102 1600 - ProSieben HD - How I Met Your Mother.ts.ap
    20130102 1600 - ProSieben HD - どのようにI Met Your Mother.ts.cuts
    20130102 1600 - ProSieben HD - How I Met Your Mother.ts.sc
    20130102 1600 - ProSieben HD - How I Met Your Mother.eit

    20130102 1141 - ProSieben HD - How I Met Your Mother.ts.ap
    20130102 1141 - ProSieben HD - How I Met Your Mother.ts.cuts
    20130102 1141 - ProSieben HD - How I Met Your Mother.ts.sc
    20130102 1141 - ProSieben HD - How I Met Your Mother.eit
    20130102 1114 - ProSieben HD - How I Met Your Mother.eit

  2. .ts だけで終わるすべてのファイル名を grep し、別のテキスト ファイル (ファイル B) に書き込みます。

    20130102 1600 - ProSieben HD - How I Met Your Mother.ts

  3. ファイル B には、良好な記録識別子のみが含まれています。この識別子を使用して、ファイル A から名前を持つすべてのファイルを削除します。末尾が何であるかは気にしません。(おそらく grep -v を使用します)。

    20130102 1600 - ProSieben HD - How I Met Your Mother.ts.meta
    20130102 1600 - ProSieben HD - How I Met Your Mother.ts
    20130102 1600 - ProSieben HD - How I Met Your Mother.ts.ap
    20130102 1600 - ProSieben HD - どのようにI Met Your Mother.ts.cuts
    20130102 1600 - ProSieben HD - How I Met Your Mother.ts.sc
    20130102 1600 - ProSieben HD - How I Met Your Mother.eit

  4. 適切な識別子に関連するすべてのファイル名を削除した後、ファイル A に「ジャンク」ファイル名を残しました

  5. ファイルAに残っている名前のファイルをすべて削除します

于 2013-01-06T15:54:25.837 に答える
-1

残り物があなたが言ったようなものである場合は、変更する必要があります

egrep '\.ts$'

egrep '\.ts.*$'

見る:

sharuzzaman.raslan@NL-4168 ~/test1
$ ls -1
a.ts
a.ts.ap
a.ts.cuts
a.ts.sc

sharuzzaman.raslan@NL-4168 ~/test1
$ ls -1| egrep '\.ts$'
a.ts

sharuzzaman.raslan@NL-4168 ~/test1
$ ls -1| egrep '\.ts.*$'
a.ts
a.ts.ap
a.ts.cuts
a.ts.sc
于 2013-01-04T09:24:57.927 に答える