2012-05-21 37 views
1

我想这样的事情的所有文件:脚本循环,并从复制命令的输出

rpm -ql `rpm -qa | grep openssh-5` 

此列出了在使用OpenSSH的-5 RPM安装的所有文件。

我希望所有这些文件复制到文件夹:例如:MyFolder文件

所以我试试这个:

cp ``rpm -ql `rpm -qa | grep openssh-5`` myfolder 

,但它失败。 有没有什么出路,任何shell脚本等?

+0

您是否尝试将它们一个接一个地复制到循环中? – cen

回答

4

您无法嵌套反引号。这应该工作:

cp $(rpm -ql $(rpm -qa | grep openssh-5)) myfolder 

anoter方法是:

rpm -qa | grep openssh-5 | xargs -d $'\n' rpm -ql | xargs -d $'\n' cp -t myfolder 

(这也处理包含空格的文件名不会换行强硬处理文件名...。)

+0

这看起来是更短和更快的方式。谢谢:) – kingsmasher1

+0

+1。不要使用反引号。 –

+0

如果文件名包含空格,会发生什么情况?嗯? – glglgl

0
files=${rpm -ql `rpm -qa | grep openssh-5`}; 

while read file do 
    cp $file "myfolder"; 
done < $files; 

也许?

+1

'$ {...}'用于参数扩展,'cp'不需要'>' – mata

0

尝试

rpm -qla \*openssh-5\* | while read filename; do 
    cp -a "$file" "$myfolder" 
done 

。请注意围绕变量的"",这些变量考虑了文件名中的空白(在RPM软件包中这是非常罕见的 - 但并非不可能)。

注意,以及rpm -qla构造使事情变得更容易。