将文件名中的数字填充为固定长度

将文件名中的数字填充为固定长度

我有一个文件目录,例如:

file.1.png
file.2.png
file.10.png
file.1000.png
file.1001.png

如何将号码填充到 4 位数字?它应该像这样结束:

file.0001.png
file.0002.png
file.0010.png
file.1000.png
file.1001.png

答案1

这也将起作用:

for f in *.png; do
    int=`basename $f .png | cut -d '.' -f 2`
    new_name=`printf "file.%0.4i.png\n" $int`
    [ ! -f $new_name ] && mv $f $new_name
done

答案2

如果您想要一个简单、可移植的脚本,一个简单的技巧是从 10001 开始计数并去掉起始数字。

for x in file.*.png; do
  n=${x%.*}; n=${n##*.}
  n=$((n + 10000))
  mv "$x" "${x%.*.*}.${n#1}.${x##*.}"
done

通过 zsh,使用兹马夫l参数扩展标志:

setopt extended_glob
autoload zmv
zmv '(file).([0-9]##).(png)' '$1.${(l:4::0:)2}.$3'

答案3

请尝试以下操作:

for f in *.png
do
   foo='0000'${f#file.} #remove "file." and prepend 0000
   foo=${foo:(-8)} #last eight characters
   echo mv $f file.$foo   
done

如果您对输出满意,请删除回声。

答案4

这里已经有很多答案了,但我想我会抛出一个简单的答案

rename 'file.' 'file.000' file.?.png
rename 'file.' 'file.00' file.??.png
rename 'file.' 'file.0' file.???.png

rename实用程序是我所知道的每个发行版的标准配置。它不像这里的其他一些解决方案那么花哨,但简单易于记住。

第一行将file.1.png其转换为file.0001.png.
第二个转换file.10.pngfile.0010.png,第三个转换file.100.png为 file.0100.png。
4位数字已经完成。

相关内容