1

我创建了一个脚本来自动清理由 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 与 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”输出的前六行显示了一个完整的尚未清理的记录。第二组仅显示 5 个文件是已删除记录的剩余部分。

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

我希望你能帮忙。

格雷茨·米尔科

4

2 回答 2

0

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

  1. 使用您在那里的格式将所有文件名转储到文本文件(文件 A)中,例如。

    20130102 1600 - ProSieben HD - 我如何遇见你的母亲
    .ts.meta 20130102 1600 - ProSieben HD - 我如何遇见你的母亲.ts
    20130102 1600 - ProSieben HD - 我如何遇见你的母亲.ts.ap
    20130102 1600 - ProSieben HD - 如何我遇见了

    的妈妈

    20130102 1141 - ProSieben HD - 我 如何
    遇见
    你的母亲
    - 我如何遇见你的母亲.eit
    20130102 1114 - ProSieben HD - 我如何遇见你的母亲.eit

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

    20130102 1600 - ProSieben HD - 我如何遇见你的 Mother.ts

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

    20130102 1600 - ProSieben HD - 我如何遇见你的母亲
    .ts.meta 20130102 1600 - ProSieben HD - 我如何遇见你的母亲.ts
    20130102 1600 - ProSieben HD - 我如何遇见你的母亲.ts.ap
    20130102 1600 - ProSieben HD - 如何我遇见了

    的妈妈

  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 回答