大量のファイルをリネームする

という必要性がでてきました。fuga?fuga.txtってなのをfuga_fuga.txtへ変換する。
当初lsとxargsとmvを組みあせてなんとかうまくできないかなと検討したんですが、変換後の文字置換がxargsの引数だとできるんだかできないんだかよくわからない。
結局クラッシクなやりかたで。

#!/bin/bash
for i in `ls *\?*.txt`
do
   mv $i ${i/\?/_}
done

bashの置換機能は正規表現ほどではないけど、こういう使い方には便利。