2010-11-30 3 views
6

안녕 얘들 아, 변수를 % exe 코드 부분에 전달하는 데 문제가 있습니다. 도움이 필요합니다. 이런 식으로 몇 가지 일을 사용하여변수를 find와 bash -c 안에 어떻게 전달합니까?

## Function 
targz() { 
    find $1 -type f -name "*.$2" -exec \ 
    bash -c 'old=$(basename {}); new=${old/%exe/tar\.gz}; \ 
     tar -zcvf $new $old; ' \; 
} 

## Function Call 
## targz [directory] [extension] 
targz . 'exe'; 

그래 나는 시도했다 : : 여기

내가 bash는 스크립트 내부에서 사용하는 내 작업 코드

new=${old/%$2/tar\.gz}; 

를하지만, 같은 파일 이름을 생성 파일 .exetar.gz

답변

5

봅니다 :

targz() { 
    find $1 -type f -name "*.$2" -exec \ 
    bash -c 'old=$(basename {}); new=${old/'"$2"'/tar\.gz}; \ 
     tar -zcvf $new $old; ' \; 
} 

트릭은 변수 확장이 수행 될 수 있도록, 작은 따옴표에서 얻을 수 있습니다.

+0

Darron에게 감사드립니다. 이것이 내가 필요한 것입니다. – EMC

4

사용 envbash에 대한 환경 변수를 설정하려면 다음

targz() { 
    find "$1" -type f -name "*.$2" -exec \ 
    env ext="$2" bash -c 'old=$(basename "{}"); new=${old/%$ext/tar\.gz}; \ 
     tar -zcvf "$new" "$old"; ' \; 
} 

파일 이름의 공백을 방지하기 위해 인용 부호를 추가했습니다.

+0

데니스, {} 주위에 큰 따옴표를 붙였습니다. – EMC

+0

니스; '$ 1'과'$ 2'를 이중 인용 할 가치가 있습니다. – mklement0

+1

@ mklement0 : 완료. 감사. –

관련 문제