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

ayc*_*yca 6 shell rename

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

file.1.png
file.2.png
…
file.10.png
…
file.1000.png
file.1001.png
…
Run Code Online (Sandbox Code Playgroud)

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

file.0001.png
file.0002.png
…
file.0010.png
…
file.1000.png
file.1001.png
…
Run Code Online (Sandbox Code Playgroud)

fro*_*r78 6

这也将起作用:

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
Run Code Online (Sandbox Code Playgroud)


Gil*_*il' 5

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

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

使用 zsh,使用zmvl参数扩展标志

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


dog*_*ane 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
Run Code Online (Sandbox Code Playgroud)

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