2012-05-21 36 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構造使事情變得更容易。