2010-11-30 10 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

bashの環境変数を設定するには、envを使用してください。

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:完了。ありがとう。 –