如何解决linux 子文件夹的连续检查和条件重命名
问题:我目前正在寻找一种方法,可以在 debian 中不断变化的子文件夹树中自动执行重命名过程。
目标:让 kodi 抓取工具识别具有修改后命名模式的动漫电视节目,而无需从我端为每个新下载的剧集进行任何额外的手动输入。
以下是该场景中文件命名约定的一些常见格式,由于不同的原因,这三种格式都不会被识别。
- [NoobSubs] 日本动漫名称 06(1080p 蓝光双音频 8 位 AAC)[4564568].mkv
两个独立的两位数不会被识别为剧集编号。 'e' 前缀是强制性的
scraper 使用 anidb 作为它的数据库,它把每一季都当作一个单独的节目——所以它必须作为第一季 (S01) 或根本不抓取,默认为第一季。一说“S02+”就找不到了
- [SubsPlease] 日本动漫名称 S2 - 11 (1080p) [4864654].mkv
上面两个问题结合起来 - 它必须是 S01 或没有和 E11 而不是 11。
在 stackoverflow 上有人的帮助下,我玩了一些正则表达式
Prepend 'E' to free standing double digits
\b([0-9]{2})\b
Substitution: E$1
\b[sS](0[1-9]|[1-9][0-9])\b
我假设这里的方法是 cronjob 命令行或 watch 带有每 10 分钟左右执行一次的脚本。 不幸的是,我对如何构建它一无所知。
[编辑] 好的,我找到了几个我可以使用的部分,并像弗兰肯斯坦怪物一样将其修补在一起,但在目前的状态下,它不会出现。 谁能帮我完成这项工作?
while true; do
#recursive directory watches
inotifywait -e modify,create,delete -r //srv/dev-disk-123/MEDIA2/anime/ && \
#modify any filename in filetree which applies
start_dir="//srv/dev-disk-123/MEDIA2/anime/"
find "$start_dir" -name '*.*' -type f \
|sort \
|while read name; do
((i++))
mv -i "$name" \
#remove season part
"$(printf 's/[sS](0[1-9]|[1-9][0-9])/' "$(dirname "$name")" $((i)) "$(basename "$name")")"
#prepend E to free standing double digits
"$(printf 's/\b([0-9]{2})\b/' "$(dirname "$name")" $((i)) "$(basename "$name")")"
#not sure how to add the E$1 here
done
done
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。