regex - 重命名脚本以调整 debian 中文件名中的某些模式
问题描述
我目前有点卡住,如果文件夹树中的文件名具有以下一项或两项,则尝试调整它们:
删除 'S00' - 'S99' - 这部分将被从文件名中删除。
s/[sS](0[1-9]|[1-9][0-9])/
我认为可以这样做任何独立的两位数前面都有一个“E”。以某种方式查找
/\b([0-9]{2})\b/
和替换E$1
示例:任何这些
[lorem ipsum] dolor sit amet 07 [consetetur][1080p].mkv
[lorem ipsum] dolor sit amet S04 07 [consetetur][1080p].mkv
[lorem ipsum] dolor sit amet S04 E07 [consetetur][1080p].mkv
改为
- [lorem ipsum] dolor sit amet E07 [consetetur][1080p].mkv
在各自的子文件夹中。
最终目标是在文件出现时自动化重命名文件的过程(后一点我必须在完成此操作后弄清楚),以便 kodi scraper 可以识别剧集
正如你所看到的,这就是我所取得的进展,它仍然是一团糟,因为我不久前在这里找到了这个重命名脚本,但我不知道如何正确应用正则表达式,我只是把它拍了进去
#!/bin/bash
start_dir="//srv/MEDIA2/"
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")")"
done
目前它返回
//home/user/./rnscript.sh: line 14: s/[sS](0[1-9]|[1-9][0-9])/: No such file or directory
//home/user/./rnscript.sh: line 16: s([0-9]{2}/: No such file or directory
如果有该领域的专业知识的人可以帮助我完成这项工作,将不胜感激。
解决方案
请您尝试以下方法:
#!/bin/bash
shopt -s globstar
start_dir="//srv/MEDIA2/" # double // may be meaningless
for name in "$start_dir"/**/*.*; do # search the directory recursively
[[ -f $name ]] || continue # skip if "$name" is not a file
newname=$(sed -E 's/[sS](0[1-9]|[1-9][0-9]) +//; s/\b([0-9]{2})\b/E\1/' <<< "$name")
if [[ "$name" != "$newname" ]]; then # skip if the filenames are the same
echo mv -- "$name" "$newname"
fi
done
echo
如果输出看起来不错,则丢弃。
我们不必对文件进行排序,因为$i
没有使用该变量。
[编辑]
如果您也想更改S04E02
为E02
,请将newname=
上面的行替换为:
newname=$(sed -E 's/[sS](0[1-9]|[1-9][0-9]) *//; s/\b([0-9]{2})\b/E\1/' <<< "$name")
区别只是更改+
为*
,表示零个或多个空格。
推荐阅读
- javascript - 如何在表单提交之前更改表单操作
- javascript - 如何在画布填充文本中实现自动换行和回车?
- angular - 如何从我的 REST API 的所有页面获取数据?
- javascript - 仅使用 JavaScript 将两个包含逗号和小数的文本字段一起添加
- node.js - 为什么我的快递应用启动后立即关闭?
- azure-devops - 如何在 Azure DevOps 链接中不包含“version=GBmaster”
- flutter - Dart 如何删除断点或调试器
- javascript - 在 react-scroll-trigger 中使用 onProgress
- mongodb - Mongodb - com.mongodb.MongoSocketReadException:过早到达流的末尾
- c# - 如何将数据库密码存储在程序中以便访问数据库?