こんにちは、河野です。
最近bundlerを使っているわけですが、たまに勢い余って--path
を付け忘れたりしてrvmのlocalにgemをインストールしたりすることがあります。
そんな時に、一括でgemを削除する方法です。
まず、削除したいgemの一覧が必要です。--no-versions
をつけるとバージョンが出力されません。
1 2 3 4 5 6 7 |
$ gem list --no-versions *** LOCAL GEMS *** actionmailer actionpack (略) |
これでgemの一覧が取得できますが、「*** LOCAL GEMS ***
」ってのが邪魔ですね。grep でフィルタします。
1 2 3 4 |
$ gem list --no-versions | grep "^[a-z]" actionmailer actionpack (略) |
これで余計な出力がなくなりましたので、これをgem uninstall
します。xargs を使えば事前の出力を引数にできますね。
1 2 3 4 5 |
$ gem list --no-versions | grep "^[a-z]" | xargs gem uninstall -aIx Successfully uninstalled actionmailer-3.2.8 Successfully uninstalled actionpack-3.2.8 INFO: gem "bundler" is not installed (略) |
途中でいくつか削除されないものがありますが、bundlerで管理しているデフォルトのgemっぽいです。
uninstallのオプションは、
- a : 全バージョン
- I : 依存性を無視する
- x : 実行ファイルも
という意味です。
1 2 3 4 5 6 7 8 |
$ gem list *** LOCAL GEMS *** bundler (1.2.0) rake (0.9.2.2) rubygems-bundler (1.1.0) rvm (1.11.3.5) |
これで、余計なgemが綺麗さっぱりなくなりました!