批量重命名CBZ文件:去除版本号前导零并转换格式
批量重命名CBZ文件解决方案
问题分析
你之前用的命令有两个关键问题:
- 正则表达式
v0([1-9]+)仅能匹配v0后跟非零开头的数字(比如v04),无法覆盖v004这类多前导零的情况 - 多余的
/e修饰符:该参数会把替换内容当作Perl代码执行,此处完全不需要,反而可能引发错误
正确的Perl版rename命令
如果你的系统使用的是Perl版本的rename(Debian/Ubuntu系默认),执行以下命令即可:
rename 's/ v0+([1-9]\d*)/, Volume $1/' *.cbz
正则逻辑说明:
v0+:匹配v后跟一个或多个连续的零([1-9]\d*):捕获第一个非零数字及其后续所有数字(比如从v004中提取4,从v012中提取12)- 替换为
, Volume $1,保留捕获到的有效数字
跨系统兼容方案(mv+sed)
如果你的系统是RedHat/CentOS系(使用简化版rename),或者不想依赖Perl环境,用循环结合sed实现:
for file in *.cbz; do new_name=$(echo "$file" | sed -E 's/ v0+([1-9][0-9]*)/, Volume \1/') mv -v "$file" "$new_name" done
-E让sed支持扩展正则,逻辑和上面一致-v参数让mv输出重命名过程,方便核对结果
安全预览验证
执行重命名前,建议先预览操作结果,避免误改:
# Perl rename预览(仅输出操作,不实际修改) rename -n 's/ v0+([1-9]\d*)/, Volume $1/' *.cbz # mv+sed预览 for file in *.cbz; do echo "$file -> $(echo "$file" | sed -E 's/ v0+([1-9][0-9]*)/, Volume \1/')"; done
内容的提问来源于stack exchange,提问作者Novum Gain
相关产品推荐
相关产品推荐

