卸载所有安装的gem,在OSX?

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

例如,我需要帮助一个朋友迁移他们的Rails开发机器来使用RVM。 由于他们之前使用过全系统的gem ,他在处理多个项目时遇到了许多麻烦。 从本质上讲,他是RVM转换的海报小孩。

我如何优雅地卸载他的OSX系统上的所有gem?

Rubygems> = 2.1.0

 gem uninstall -aIx 

Rubgems <2.1.0

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

你也可以build立一个新的Gemfile并运行bundle clean --force 。 这将删除所有未包含在新Gemfile中的其他gem。

一个最不同的版本,跳过切割步骤,利用' – 无版本'选项:

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

既然你正在删除所有的东西,我不认为需要“我”选项。 每当gem被删除,就没事了。

使用任一

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

要么

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

根据你想要的,你可能需要执行两个,因为“gem列表”和“sudogem列表”提供独立的名单。

不要将正常的“gem列表”与sudo-ed“gem uninstall”混合在一起,否则最终可能会卸载sudo-gem(former)或者出现很多错误(后者)。

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

首先确保你至less有gem版本2.1.0

 gem update --system gem --version # 2.6.4 

要卸载只需运行:

 gem uninstall --all 

您可能需要使用sudo命令:

 sudo gem uninstall --all 

如果你喜欢使用ruby:

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

干杯

Rubygems> = 2.1.0

 gem uninstall -aIx 

如果terminal返回低于错误

 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 

并input您的mac os帐号密码完成!

唯一的命令帮助我清理所有的gem,并忽略了不能卸载的默认gem

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

我不久前做了这个(同样的海报 – 儿童RVM切换器情况):

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

把所有的gem(包括版本的东西)的名单,削减它只保留gem的名称,然后卸载这些gem的所有版本。

只有在系统安装了gem的情况下, sudo才有用,除非必要,否则不应该包含。

当试图删除安装为根的gem时,xargs似乎在试图卸载默认gem时遇到错误时停止:

 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 

这不适用于每个人,但这是我用的:

 sudo for gem (`gem list | cut -d" " -f1`); do gem uninstall $gem -aIx; done 
 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这里是不包含默认的gem。 所有其他的gem将被卸载。 如果您遇到许可问题,也可以在sudo之前加上sudo

而对于你们这些人来说,因为你想删除所有带有特定前缀的gem( 呃,我正在看你aws-sdk!),你可以运行如下的东西:

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

显然把你的查询,而不是aws-sdk- 。 你需要在那里忽略依赖。

采用安藤早先的答案