首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于在我的Enigma2盒上录制的清理脚本

用于在我的Enigma2盒上录制的清理脚本
EN

Stack Overflow用户
提问于 2013-01-04 16:59:35
回答 2查看 1.3K关注 0票数 1

我已经创建了一个脚本来自动清理我的ET9000卫星接收器上的录音,它由CRON运行。

我已经在运行一个脚本来清理我录制的文件中较旧的X天了…但我意识到

代码语言:javascript
复制
find /media/hdd/Serien/my_fav_series/ -mtime +5

效率不够高,一次录制的四到六个文件中的一些文件具有不同的年龄...我想确保我还会有一些录音,即使这些录音已经超过X天了!

到目前为止,我得到的信息如下:

代码语言:javascript
复制
#!/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文件,同时保留通过参数给定的数量...

但是它还没有像我想要的那样智能!我仍然需要添加一个删除所有剩余记录的内容,我指的是记录的其他部分,而不是消耗空间的部分:

代码语言:javascript
复制
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的文件...

编辑:

代码语言:javascript
复制
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文件,如果没有删除,则为该组的其余部分。

希望你能帮上忙。

Greetz Mirco

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-06 23:54:26

基于你的编辑,我有另一个想法。

  1. 将所有文件名转储到一个文本文件(文件A)中,格式如下:

20130102 1600 - ProSieben HD -我如何认识您的Mother.ts.meta

20130102 1600 - ProSieben HD -我如何认识您的Mother.ts

20130102 1600 - ProSieben HD -我如何认识您的Mother.ts.ap

20130102 1600 - ProSieben HD -我如何认识您的Mother.ts.cuts

20130102 1600 - ProSieben HD -我如何认识您的Mother.ts.sc

20130102 1600 - ProSieben HD -我如何认识您的Mother.eit

20130102 1141 - ProSieben HD -我如何认识您的Mother.ts.ap

20130102 1141 - ProSieben HD -我如何认识您的Mother.ts.cuts

20130102 1141 - ProSieben HD -我如何认识您的Mother.ts.sc

20130102 1141 - ProSieben HD -我如何认识您的Mother.eit

20130102 1114 - ProSieben HD - How I Met Your Mother.eit

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

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

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

20130102 1600 - ProSieben HD -我如何认识您的Mother.ts.meta

20130102 1600 - ProSieben HD -我如何认识您的Mother.ts

20130102 1600 - ProSieben HD -我如何认识您的Mother.ts.ap

20130102 1600 - ProSieben HD -我如何认识您的Mother.ts.cuts

20130102 1600 - ProSieben HD -我如何认识您的Mother.ts.sc

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

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

  • 删除文件A中留下的所有文件名
票数 0
EN

Stack Overflow用户

发布于 2013-01-04 17:24:58

如果剩下的就像你提到的那样,你需要改变

代码语言:javascript
复制
egrep '\.ts$'

代码语言:javascript
复制
egrep '\.ts.*$'

请参见:

代码语言:javascript
复制
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
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14153979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档