我正在寻找一种优雅的 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 和重命名零填充方法,但我发现之前的问题和教程似乎假设纯数字或标准化长度的文件命名方案。在这种情况下,可以使用 awk 等以可预测的方式分解和重新组装“-”分隔符之间的字段。我的字符串长度未知,因此“-”字符之间包含未知数量的字段。
我想象答案将是一个“for 循环”。我希望循环执行的逻辑类似于:将文件名读取到第一个“-”字符。确定第一个“-”之前的数字是一位数还是两位数。如果是个位数,则在其前面插入“0”字符。
编辑答案
Renaud 指出了简单 for 循环的正确语法(我自己的尝试也导致了两位数的填充,但 Renaud 的代码有效)
对于 [0-9]-*.mp3 中的 f;执行 mv "$f" "0$f"; 完毕