如何在Bash中为带分隔符的任意长度编号字母数字文件名补零?
为带连字符的编号文件名补零的CLI解决方案
我需要一种优雅的CLI方法,给任意长度、用连字符替代空格的编号字母数字文件名补零。
原文件列表示例:
1-file-name-of-one-length.mp3 2-shorter-file-name.mp3 3-really-really-really-long-file-name.mp3 ... 10-another-file-name.mp3
转换后期望的效果:
01-file-name-of-one-length.mp3 02-shorter-file-name.mp3 03-really-really-really-long-file-name.mp3 ... 10-another-file-name.mp3
我花了一天时间研究awk、bash和rename的补零方法,但现有资料大多假设文件名是纯数字或固定长度格式,这类场景可以用awk拆分重组分隔符间的字段。但我的文件名字符串长度未知,连字符分隔的字段数量也不确定。
我原本设想的解决方案是用for循环,逻辑为:读取文件名到第一个连字符前的部分,判断该位置的数字是一位数还是两位数,若是一位数就在前面插入一个'0'。
正确的实现命令
Renaud提供了可行的简单for循环语法(我自己尝试的代码会给两位数也补零,但这个代码能精准处理):
for f in [0-9]-*.mp3; do mv "$f" "0$f"; done
内容的提问来源于stack exchange,提问作者mpac9898
相关产品推荐
相关产品推荐

