有大神能帮忙改个脚本吗,就 1 句话,不知道能不能实现。

2022-03-29 10:37:40 +08:00
 yyysuo

脚本如下: #!/bin/sh FILE=ls /tmp/emby/transcoding-temp/*.ts -l|grep "^-"| wc -l if [ ${FILE} -ge 120 ];then find /tmp/emby/transcoding-temp/.ts -type f -size +50M -exec rm -rf {} ; ls /tmp/emby/transcoding-temp/.ts -t|tail -100|xargs rm -rf else exit 0 fi

在 op 上用 docker 整了个 emby ,但是这货转码的缓存是放在硬盘上的,怕把我的 ssd 给写挂了,就把缓存目录映射到 tmp 文件夹了,自己费劲查资料写了个简单的脚本,每 5 分钟执行一次,去检查缓存目录 /tmp/emby/transcoding-temp/下的缓存文件,如果文件数大于 120 ,就把超过 50m 大小的最旧的缓存文件删除掉。

但是现在 emby 现在改了缓存的存储位置,原来是一股脑全放在 /tmp/emby/transcoding-temp/下面,现在每个播放进程都在 /tmp/emby/transcoding-temp/下单独建立了子文件夹,名字还是随机的,所以下面这句就得改改了,有大神能指点一下吗? find /tmp/emby/transcoding-temp/.ts -type f -size +50M -exec rm -rf {} ; ls /tmp/emby/transcoding-temp/.ts -t|tail -100|xargs rm -rf

4078 次点击
所在节点    NAS
27 条回复
zanelee
2022-03-29 14:59:58 +08:00
/tmp/emby/transcoding-temp/xxx/1.ts
zanelee
2022-03-29 15:03:45 +08:00
@zanelee 文件目录是这种样子的话,就 xxx 目录下面都是那些.ts 结尾的话,这两句改成
find $TEMP_ROOT/$dir -type f -size +50M -exec rm -rf {} ;
ls $TEMP_ROOT/$dir -t|tail -100|xargs rm -rf
yyysuo
2022-03-29 18:00:34 +08:00
@zanelee
有 2 种播放场景,一种是播放电影,一种是播放 IPTV ,这 2 种方式的文件结构不太一样。

第 1 种播放电影文件结构:
/tmp/emby/transcoding-temp 下面有:2EED80 文件夹
B19FD8 文件夹下面有:
文件夹:2EED80_Fonts (空文件夹)
2EED80.m3u8
2EED80_0.ts
2EED80_1.ts
2EED80_2.ts.tmp

脚本结果:
当满足 EED80 文件夹下的文件超过 120 个的条件时,脚本会一次性删除名称不定的子文件夹下面的文件,也会删除文件夹本身,也可能是删除末尾 100 个文件的命令瞬间重复执行了多次,不知道为什么。


第 2 种观看 IPTV 结构:
/tmp/emby/transcoding-temp 下面有:B19FD8 文件夹
0d1cfc9928974c4cb6e0d2397e7ea698.ts

B19FD8 文件夹下面有:
B19FD8.m3u8
B19FD8_0.ts
B19FD8_1.ts
B19FD8_2.ts.tmp

脚本结果:运行良好
yyysuo
2022-03-29 18:55:18 +08:00
@yyysuo 已经确认脚本非常棒,没有任何问题,是需要调整脚本的执行频繁和每次删除的缓存数,删除策略太激进,会把 emby 未播放的缓存也删除,导致 emby 自身认为缓存出错,重置缓存了。
EvineDeng
2022-03-29 22:20:19 +08:00
@yyysuo ls -t 已经确保了文件是按时间排序的。
openbsd
2022-03-30 10:11:08 +08:00
大佬们都不用 find 的 -delete 参数吗 [狗头保命]
yyysuo
2022-03-30 15:33:29 +08:00
根据大神的脚本和我的使用情况调整了一下,在定时任务里面 5 分钟执行一次脚本,脚本检查子文件夹中的文件数量,大于 500 则删除掉末尾的 200 ,这样存量缓存一直有 300 个,大约占用 500M 的内存空间,大家如果用的话根据自己的剩余内存数调整一下保留的缓存文件数量。
#!/bin/sh
TEMP_ROOT="/tmp/emby/transcoding-temp"
DIR=`ls -F $TEMP_ROOT| grep '/$'`
find /tmp/emby/transcoding-temp/*.ts -type f -size +500M -exec rm -rf {} \;
for dir in $DIR; do
FILE=`ls $TEMP_ROOT/$dir*.ts -l|grep "^-"| wc -l`
if [ ${FILE} -ge 500 ];then
find $TEMP_ROOT/$dir*.ts -type f -size +50M -exec rm -rf {} ;
ls $TEMP_ROOT/$dir*.ts -t|tail -200|xargs rm -rf
else
exit 0
fi
done

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/843560

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX