在 OSX 中卸载所有已安装的 gems?

有些情况下,我想恢复和卸载所有以前安装的 gem。

例如,我需要帮助一个朋友将他们的rails开发机器迁移到使用RVM。由于他们之前使用的是系统范围的gem,所以在处理多个项目时,他遇到了许多令人头痛的问题。本质上,他是RVM转变的典型代表。

我如何才能优雅地卸载他的OSX系统上的所有宝石?

125187 次浏览

Rubygems >= 2.1.0

gem uninstall -aIx

a删除所有
的版本 I忽略依赖项
x包含可执行文件

Rubgems & lt;魅惑

for i in `gem list --no-versions`; do gem uninstall -aIx $i; done

不久之前我就这么做了(同样的典型RVM切换情况):

gem list | cut -d" " -f1 | sudo xargs gem uninstall -Iax

获取所有宝石的列表(包括版本内容),将其切割为仅保留宝石名称,然后卸载此类宝石的所有版本。

sudo只在系统范围内安装gems时有用,除非必要,否则不应该包含它。

一个稍微不同的版本,跳过了cut步骤,利用了'——no-version'选项:

gem list --no-version |xargs gem uninstall -ax

既然你要删除所有的东西,我认为没有必要用“我”这个选项。无论何时宝石被移除,都是正常的。

使用

$ gem list --no-version | xargs gem uninstall -ax

$ sudo gem list --no-version | xargs sudo gem uninstall -ax

根据您的需要,您可能需要同时执行这两个列表,因为“gem list”和“sudo gem list”提供独立的列表。

不要把普通的“gem list”和sudo-ed的“gem uninstall”混在一起,否则你可能会卸载sudo-ed安装的gems(前者)或得到很多错误(后者)。

如果你喜欢使用ruby:

ruby -e "`gem list`.split(/$/).each { |line| puts `gem uninstall -Iax #{line.split(' ')[0]}` unless line.strip.empty? }"

干杯

你也可以构建一个新的Gemfile并运行bundle clean --force。这将删除新Gemfile中未包含的所有其他宝石。

当试图删除安装在根目录下的宝石时,xargs似乎在遇到试图卸载默认宝石的错误时停止:

sudo gem list | cut -d" " -f1 | xargs gem uninstall -aIx
# ERROR:  While executing gem ... (Gem::InstallError)
#    gem "test-unit" cannot be uninstalled because it is a default gem
< p >
这并不适用于所有人,但这里是我使用的替代:

sudo for gem (`gem list | cut -d" " -f1`); do gem uninstall $gem -aIx; done

唯一的命令帮助我清理所有宝石和忽略默认宝石,不能卸载

for x in `gem list --no-versions`; do gem uninstall $x -a -x -I; done

如果你使用的是Rubygems 2.1.0或更高版本,你可以尝试:gem uninstall --all

Rubygems >= 2.1.0

gem uninstall -aIx

如果终端返回低于错误

ERROR:  While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.

然后将上述命令写成如下所示

sudo gem uninstall -aIx

并输入您的mac os帐户密码 完成了! !< / p >

首先确保你拥有至少2.1.0版本的gem

gem update --system
gem --version
# 2.6.4

要卸载,只需运行:

gem uninstall --all

你可能需要使用sudo命令:

sudo gem uninstall --all
gem list --no-version | grep -v -e 'psych' -e 'rdoc' -e 'openssl' -e 'json' -e 'io-console' -e 'bigdecimal' | xargs sudo gem uninstall -ax

这里的Grep不包括默认宝石。所有其他宝石将被卸载。你也可以在它前面加上sudo以防你遇到权限问题。

对于那些想要删除带有特定前缀的所有gems (嗯哼 I'm looking at you aws-sdk!)的人,你可以运行这样的程序:

gem list --no-version | grep "aws-sdk-" | xargs gem uninstall -aIx

显然,输入你的查询而不是aws-sdk-。你需要在那里使用-I来忽略依赖项。

采用了安藤的之前的答案