2010-11-30 20 views
6

Merhaba arkadaşlar, kodun% exe bölümüne değişken geçirme ile ilgili sorunlar yaşıyorum. Yardımın lazım. Böyle o bazı şey kullanarakİçinde bul ve bash -c değişkenini nasıl geçirebilirim?

## 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'; 

ve evet ben denedim: Burada

ben bash komut dosyası içinde kullanmak benim çalışma kodudur

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

ama sanki dosya adlarını oluşturur: dosyanın .exetar.gz

cevap

5

Dene:

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

hüner değişken genişleme yapılacağı, böylece tek alıntının dışarı elde etmektir.

+0

Teşekkür ederim Darron, tam da ihtiyacım olan buydu. – EMC

4

Kullanım envbash için bir ortam değişkeni ayarlamak için:

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

Dosya isimlerindeki boşluklara karşı korumak için bazı alıntılar ekledim.

+0

Teşekkür ederim Dennis, {} – EMC

+0

Nice; Ayrıca '$ 1' ve '$ 2' çift tırnaklı değer. – mklement0

+1

@ mklement0: Bitti. Teşekkürler. –

İlgili konular