
次のファイルディレクトリがあります。
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.png
file.0010.png
file.100.png