file_name.mt2のようなファイル名をfile_name.mt0002に変更するには?

file_name.mt2のようなファイル名をfile_name.mt0002に変更するには?

このファイル名を持つ複数のファイルがあるので、名前をこのように変更したいと思います。

現在:

file_name.mt0  
file_name.mt1  
file_name.mt2  
file_name.mt3  
file_name.mt4  
file_name.mt5   
file_name.mt6  
file_name.mt7  
file_name.mt8  
file_name.mt9  
file_name.mt10  
file_name.mt11

新しい:

file_name.mt0000  
file_name.mt0001  
file_name.mt0002  
file_name.mt0003  
file_name.mt0004  
file_name.mt0005   
file_name.mt0006  
file_name.mt0007  
file_name.mt0008  
file_name.mt0009  
file_name.mt0010  
file_name.mt0011

よろしくお願いします~~

答え1

次のスクリプトでこれを実行できます。

#! /usr/bin/ksh

typeset -Z4 N
find . -name 'file_name.mt*' | while read FN
do
   N=${FN#./file_name.mt}
   mv $FN file_name.mt$N
done

答え2

Larry Wallsのシンプルで強力な名前変更コマンドは正しい選択です。

rename 's/(\d+)$/sprintf("%04d",$1)/e' file*

答え3

#!/bin/bash

for i in file_name*; do 
    nf=`printf "file_name.mt%04d" ${i//[!0-9]/}`; 
    mv $i $nf;
done

以下は、目的のタスクを実行するbashスクリプトです。 lsを削除し、globを使用しました。素晴らしい参考文献@Sparkhawk

関連情報