2012-05-21 3 views
1

에서 모든 파일을 복사는 :스크립트 루프와 나는 이런 식으로 뭔가를 시도하고 명령 출력

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

이 OpenSSH의-5 RPM을 사용하여 설치된 모든 파일을 나열합니다.

나는 폴더에 모든 파일을 복사 할 : 예 : MyFolder에

그래서 난이 시도 :

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

을하지만 실패합니다. 쉘 스크립트와 같은 방법이 있습니까?

+0

루프 내에서 하나씩 복사하려고 했습니까? – cen

답변

4

backticks를 중첩 할 수 없습니다. 이 작업을해야합니다 :

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 구조에도 유의하십시오.

관련 문제