用于循环并从命令输出复制所有文件的脚本

时间:2012-05-21 07:57:06

标签: linux shell

我正在尝试这样的事情:

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

列出使用openssh-5 rpm安装的所有文件。

我希望将所有这些文件复制到一个文件夹中:例如:myfolder

所以我试试这个:

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

但它失败了。 有没有出路,任何shell脚本都是这样的?

3 个答案:

答案 0 :(得分:4)

你不能嵌套反引号。这应该有效:

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

另一种方式是:

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

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

答案 1 :(得分:0)

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

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

可能?

答案 2 :(得分:0)

尝试

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

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

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