2011-07-15 101 views
3

我正在嘗試編寫一個Bash腳本來轉換一堆文件。在Bash中將通配符匹配用作命令行參數

假設我有一個目錄/path/to/my files/三個文本文件:a b.txtc d.txte.txt(注意空格)

我需要能夠調用此類腳本:

$ ./myscript.sh /path/to/my\ files/*.txt 

,然後在bash中循環瀏覽它們以便像這樣處理它們:

dest='/desktop/' 
for ARG in [email protected]; do 
    /some/other/script $ARG $dest$ARG.new 
done 

它不必工作完全是這樣的,無論是最容易產生類似結果的東西

回答

5

這是否你所需要的:

dest='/desktop/' 
for ARG in "[email protected]"; do 
    /some/other/script "$ARG" "$dest$ARG.new" 
done 

編輯:爲了去除ARG

dest='/desktop/' 
for ARG in "[email protected]"; do 
    /some/other/script "$ARG" "$dest$(basename "$ARG").new" 
done 
+0

的路徑' 「$ @」'讓我一半。理想情況下,我希望$ ARG只有文件名,這樣'$ dest $ ARG'沒有太大的路徑。是否有捷徑可尋? – Dex

+0

太棒了!....... – Dex

+1

甚至可以將它縮短爲'對於ARG;' - 默認情況下使用'$ @'。 – l0b0

1

Bash在執行命令之前執行通配符擴展,即它將用匹配文件列表替換該表達式。