2015-06-22 68 views
1

我有這個慶典函數,它接受文件作爲參數:bash的功能 - 帶有空格的文件名作爲參數

txz() 
{ 
    file_in=${@:1:$#-1} 
    file_out=${@: -1} 

    echo "file_in=${file_in}" 
    echo "file_out=${file_out}" 

    tar -cvf - ${file_in} | xz -e9zf - > "${file_out}" 
} 

的功能必須有至少2個參數來調用。最後一個參數始終是存檔名稱,其餘參數是要壓縮的文件。該功能的工作,因爲它應該當我在他們的名字一樣調用它的文件不帶空格:

txz File1 File2 archive.tar.xz 

但它失敗蒙山:

txz "File 1" "File 2" archive.tar.xz 

file_in=File 1 File 2 
file_out=archive.tar.xz 
tar: File: Cannot stat: No such file or directory 
tar: 1: Cannot stat: No such file or directory 
tar: File: Cannot stat: No such file or directory 
tar: 2: Cannot stat: No such file or directory 
tar: Exiting with failure status due to previous errors 

我還試圖創建一個數組,但它不工作要麼:

txz() 
{ 
    file_in=(${@:1:$#-1}) 
    file_out=${@: -1} 

    echo "file_in=${file_in[@]}" 
    echo "file_out=${file_out}" 

    tar -cvf - "${file_in[@]}" | xz -e9zf - > "${file_out}" 
} 

我應該如何創建函數,因此它適用於所有文件名?

回答

1

您應該使用BASH陣列來存儲多個文件名:

txz() { 
    file_in=("${@:1:$#-1}") 
    file_out="${@: -1}" 
    echo "file_in=${file_in[@]}" 
    echo "file_out=${file_out}" 

    tar -cvf - "${file_in[@]}" | xz -e9zf - > "${file_out}" 
} 

PS:注意如何[email protected]必須有雙引號兩個任務。

相關問題