2010-11-30 44 views
6

嘿傢伙們,我遇到了將變量傳遞給%exe部分代碼的問題。需要你的幫助。如何在find和bash -c中傳遞變量?

這裏是我使用bash腳本中我的工作代碼:

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

是的,我已經嘗試使用它的一些事情是這樣的:

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; ' \; 
} 

關鍵是要擺脫單引號的,所以變量擴展將被執行。

4

使用env設置環境變量bash

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 2010-11-30 16:47:33

+0

不錯;這也值得雙引號`$ 1`和`$ 2`。 – mklement0 2015-03-28 22:49:14