ファイル名の一括置換をどうしてますか。
わたしは、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
インストール
wget http://plasmasturm.org/code/rename/rename chmod +x rename ./rename -h
同じことをsed と bash でやろうとすると
ブレース展開には置換があって、それを知ってると少し早い
.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とか滅びたらいいのに。