それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

ファイル名の一括置換コマンド rename

ファイル名の一括置換をどうしてますか。

わたしは、rubyワンライナーかいたり、したいんだけど。ruby ワンライナーには致命的欠陥

rename コマンド

そこを我慢して使ってると、rename コマンドを知った。

たとえば、拡張子を変えるとき

rename 's/txt/csv' *.txt

たとえば、{out-0001.csv-out-9999 } の名前の一部を変えるとき

rename 's/out/in/ *.csv

例えば、集めたログファイルのファイル名から数字を削除するには

rename "s/-\d//" *.log

これでOK。強い。

rename コマンドは強い。シンプルで分かりやすい。置換条件とファイル名一覧を検索条件に使うことが出来る。

インストール

brew install rename 

同じことをsedbash でやろうとすると

ブレース展開には置換があって、それを知ってると少し早い

.jpeg ⇛ .jpg をやる例1

for name in *.jpg ;do  mv $name ${name/jpg/jpeg}    ; done

.jpeg.jpgをやる例2

for i in *.jpg ;do  o=$(echo $i|sed 's/jpeg/jpg/g');mv $i $o    ; done

ながい、、どう考えても長い。windowsコマンドプロンプトなら move *.txt *.csv 出来たと思うんだけど。

ruby ワンライナーでは

ruby -ne "puts $_" *.txt ##=> ARGV[0].each になって目的を達せない

while gets ; しちゃうから当たり前なんだけど ほしいのはARGV.each{| $_| } ですよねぇ

ruby -e ' ARGV.each{|e| FileUtils.mv( e, e.gsub(/txt/,"csv") ) ' -r fileutlils *.txt

やっぱり最近のruby は気に入らん。 fileutilsとか滅びたらいいのに。