如何通过终端批量将文件夹内SVG文件名首字母大写改为小写
批量将CapitalCase命名的svg文件转为camelCase格式
你之前执行的命令没达到预期,核心原因是${f:1}的作用是截取文件名从第二个字符开始的内容,相当于直接把首字符删掉了,根本不是转小写,自然不对。
下面给几个不同环境下可用的方案,直接在存放svg的目标文件夹里执行就行:
- 方案1:Bash 4.0及以上版本(绝大多数Linux发行版默认环境,最简洁)
for f in *.svg; do newname="${f,}" mv -v -- "$f" "$newname" done
语法说明:
${f,}是Bash内置的参数扩展功能,专门用来把字符串的第一个字符转成小写,剩下的字符保持原样,刚好匹配你要的首字母小写、其余不变的需求。命令里加--是为了兼容特殊开头的文件名,避免mv把文件名误判成命令参数。
- 方案2:兼容低版本Bash(比如macOS自带的3.2版本Bash)/ 通用POSIX环境
如果你的环境Bash版本比较老,不支持上面的,语法,可以用tr命令配合字符串截取实现首字母转小写:
for f in *.svg; do first_char=$(printf '%s' "${f:0:1}" | tr '[:upper:]' '[:lower:]') rest_part="${f:1}" mv -v -- "$f" "${first_char}${rest_part}" done
- 方案3:perl版rename命令(适合批量处理大数量文件,效率高)
如果你的系统装了perl版本的rename工具(部分Linux发行版默认预装,注意和util-linux版的rename区分),可以直接用正则一条命令搞定:
rename 's/^./\l$&/' *.svg
语法说明:正则匹配文件名的第一个字符,通过
\l标记把匹配到的首字符转成小写,处理几千个文件速度很快。
执行前的安全提示
正式执行重命名前,建议先把命令里的mv -v替换成echo mv -v先跑一遍,这时候终端只会打印所有将要执行的重命名操作,不会真的改文件名,你确认所有转换后的文件名都符合预期,再把echo去掉执行真实操作,避免改错文件。
你提到文件夹里的文件都是字母或数字开头,数字开头的文件执行上述命令时不会有改动(数字没有大小写),完全符合预期。
内容的提问来源于stack exchange,提问作者StonedStudio
相关产品推荐
相关产品推荐

