ファイル名の数字を固定長でパッド

ファイル名の数字を固定長でパッド

次のファイルディレクトリがあります。

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ユーティリティは、私が知っているすべてのディストリビューションの標準です。ここの他のソリューションほど派手ではありませんが、シンプルで覚えやすいです。

1行目は.pngfile.1.pngに変換しfile.0001.png、3行目はfile.0100.pngに変換します。 4桁が完成しました。
file.10.pngfile.0010.pngfile.100.png

関連情報