パラボラアンテナと星の日記

あることないこと

gemの名前を変えたくて、ファイル名やディレクトリ名の一括リネーム

gemの名前を途中で変えたくなった時の話。

gemの名前とか最初にちゃんと考えとけという話ではありますが。

「ファイルの名前変える」と「中身を変える」必要あるんだが、「ファイルの名前を変える」時の話。

./.rspec
./.ruby-version
./.travis.yml
./AAA.gemspec
./Gemfile
./Gemfile.lock
./lib
./lib/AAA
./lib/AAA/version.rb
./lib/AAA.rb
./LICENSE.txt
./Rakefile
./README.md
./spec
./spec/AAA_spec.rb
./spec/spec_helper.rb

AAAの部分をBBBにリネームしたい。が、良いやり方がわからない。。。

そもそも

./lib/AAA_core/AAA_hogehoge.rb

みたいなのがあったときも、AAAの部分はBBBに一括リネームしたいみたいな感じなので、割と複雑なのだ。。

./lib/AAA_core を先にリネームするとAAA_hogehoge.rbのパスが変わってしまう。

ここでの結論

一発でやるのは難しかったんで

$ find . | grep AAA | xargs -I {} echo "mv {} \$(echo {} | sed -e 's/AAA/BBB/g')" 
mv ./AAA.gemspec $(echo ./AAA.gemspec | sed -e 's/AAA/BBB/g')
mv ./lib/AAA $(echo ./lib/AAA | sed -e 's/AAA/BBB/g')
mv ./lib/AAA/version.rb $(echo ./lib/AAA/version.rb | sed -e 's/AAA/BBB/g')
mv ./lib/AAA.rb $(echo ./lib/AAA.rb | sed -e 's/AAA/BBB/g')
mv ./spec/AAA_spec.rb $(echo ./spec/AAA_spec.rb | sed -e 's/AAA/BBB/g')

みたいにしてシェルスクリプトを作ってshに食わせる

$ find . | grep AAA | xargs -I {} echo "mv {} \$(echo {} | sed -e 's/AAA/BBB/g')"  | sh

ディレクトリを先にリネームすると失敗するmvがあるけど、何回かやればよい、はず

(良いやり方あったら教えてください。。。)