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があるけど、何回かやればよい、はず
(良いやり方あったら教えてください。。。)