2017-10-11 105 views
1

我想創建一個腳本,通過刪除midle擴展名來重命名具有2個​​擴展名的文件。在談到這一點,我發現這個偉大的主題: Extract filename and extension in Bash在bash中提取位置文件名和擴展名

有人張貼有這方面殼牌參數擴展:

~% FILE="example.tar.gz" 
~% echo "${FILE%%.*}" 
example 
~% echo "${FILE%.*}" 
example.tar 
~% echo "${FILE#*.}" 
tar.gz 
~% echo "${FILE##*.}" 
gz 

我的問題是關於上述聲明:你怎麼迴應例子。 gz

謝謝

回答

1

你不能做一個操作;你需要使用臨時變量。

$ ext=${FILE##*.} # ext=gz 
$ tmp=${FILE%.*} # Remove .gz 
$ echo "${tmp%.*}.$ext" # Remove .tar, then add .gz back 
1

你可以簡單地實現它沒有任何臨時變量,結合正確的語句,使該兩個部分你需要用一個.之間:

echo "${FILE%%.*}.${FILE##*.}"