【发布时间】:2016-09-21 09:43:47
【问题描述】:
我想得到rpm -qa | grep something 的结果,然后运行我得到rpm -ql result-i-got 的结果,全部在一行中。
我发现这是可行的:
rpm -ql $(rpm -qa | grep something)
我想知道,有没有更好甚至不同的方法来传递这个结果以获得与我上面写的相同的结果? 谢谢。
【问题讨论】:
-
对我来说看起来很优雅...
我想得到rpm -qa | grep something 的结果,然后运行我得到rpm -ql result-i-got 的结果,全部在一行中。
我发现这是可行的:
rpm -ql $(rpm -qa | grep something)
我想知道,有没有更好甚至不同的方法来传递这个结果以获得与我上面写的相同的结果? 谢谢。
【问题讨论】:
xargs 就是为此而生的:
rpm -qa | grep something | xargs rpm -ql
【讨论】:
您实际上可以为rpm -qa 提供通配符参数;这避免了管道到另一个命令的需要,因此您可以使用而不是 rpm -qa | grep something
rpm -qa '*something*'
使用单引号或双引号来防止 shell 将星号扩展为 shell globbing 模式。
例子:
$ rpm -qa '*vim*'
vim-enhanced-7.0.109-7.2.el5
vim-minimal-7.0.109-7.2.el5
vim-common-7.0.109-7.2.el5
上述命令可以结合-l选项列出相关包中的文件。
rpm -qal '*vim*'
这个命令的一个问题是,如果返回多个包,由于没有打印包名,所以不清楚哪些文件属于哪个包。要在输出中包含包名称,您可以添加 --queryformat 选项以更好地控制信息的打印方式。例如,以下示例打印包的名称,下划线是一排连字符减号,后跟该包提供的文件列表:
rpm -qal --qf "\n%{NAME}\n--------\n" '*vim*'
rpm 手册页包含有关自定义命令输出的更多信息。
如果你发现自己经常使用这个命令,你可以把它变成一个别名:
alias rpmlist='rpm -qal --qf "\n%{NAME}\n--------\n"'
并像这样使用它
rpmlist '*vim*' | less
【讨论】: