在我的Enigma2盒子上录制的清理脚本

时间:2013-01-04 08:59:35

标签: bash ksh

我已经创建了一个脚本来自动清理由CRON运行的ET9000 Sat-Receiver上的录像。

我已经在我的录音中运行了一个脚本来清理文件中较早的X-Days ......但我认识到了

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

效率不够,四到六个文件中的一些录制内容会有不同的年龄......而且我想确保我总会留下一些录音,即使这些录音超过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的文件...

编辑:

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”输出的前六行显示完整尚未清理的录音。仅显示5个文件的第二个集是来自已删除记录的剩余部分。

我需要的功能是识别第一个日期和时间。时间模式和排序是组中的那些,然后检查该组是否包含* .TS文件,如果它不删除该组的其余部分。

我希望你能提供帮助。

格尔茨 的Mirco

2 个答案:

答案 0 :(得分:0)

根据您的编辑,我有另一个想法。

  1. 使用您所拥有的格式将所有文件名转储到文本文件(文件A)中。

    20130102 1600 - ProSieben HD - 我如何遇见你的Mother.ts.meta
    20130102 1600 - ProSieben HD - 我如何遇见你的母亲 20130102 1600 - ProSieben HD - 我如何遇见你的Mother.ts.ap
    20130102 1600 - ProSieben HD - 我如何遇见你的母亲.ts.cuts
    20130102 1600 - ProSieben HD - 我如何遇见你的Mother.ts.sc
    20130102 1600 - ProSieben HD - 我如何遇见你的母亲。

    20130102 1141 - ProSieben HD - 我如何遇见你的Mother.ts.ap
    20130102 1141 - ProSieben HD - 我如何遇见你的母亲.ts.cuts
    20130102 1141 - ProSieben HD - 我如何遇见你的Mother.ts.sc
    20130102 1141 - ProSieben HD - 我如何遇见你的母亲 20130102 1114 - ProSieben HD - 我如何遇见你的母亲。

  2. Grep所有仅以.ts结尾的文件名并写入另一个文本文件(文件B),例如。

    20130102 1600 - ProSieben HD - 我如何遇见你的母亲

  3. 文件B仅包含良好的录制标识符。使用此标识符,从文件A中删除所有具有该名称的文件,不关心结尾是什么。 (使用grep -v) 例如

    20130102 1600 - ProSieben HD - 我如何遇见你的Mother.ts.meta
    20130102 1600 - ProSieben HD - 我如何遇见你的母亲 20130102 1600 - ProSieben HD - 我如何遇见你的Mother.ts.ap
    20130102 1600 - ProSieben HD - 我如何遇见你的母亲.ts.cuts
    20130102 1600 - ProSieben HD - 我如何遇见你的Mother.ts.sc
    20130102 1600 - ProSieben HD - 我如何遇见你的母亲。

  4. 删除与好标识符相关的所有文件名后,在文件A中留下“垃圾”文件名

  5. 删除文件A中剩下的所有文件

答案 1 :(得分:-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