2013-12-09 50 views
1

因此繼承該場景:如何從文件列表中獲取文件名

我需要編寫一個自動腳本,從目錄中選擇jar文件。但是jar文件將與新的jar文件定期

被替換例如:XXX/YYY /服務器-SDK-01.00.00-000080.000055.e0eb521.jar

服務器SDK的部分是不變的時間但版本編號的其餘部分發生變化。

我如何可以讀取文件名,並將其保存到變量在這種情況下。

我試圖

fspec=XXX/YYY/server-sdk-*.jar 

filename="${fspec##*/}" # get filename 
dirname="${fspec%/*}" # get directory/path name 

但在這裏我只得到服務器-SDK - *水瓶中,我希望它是服務器SDK-01.00.00-000080.000055.e0eb521.jar文件名。

+2

其中的殼呢?哪個OS? –

+0

UNIX和CentOS – nakeer

+0

什麼是不工作的,什麼是錯誤? – anubhava

回答

1

Double command substitunion搶救這裏shell擴展。考慮這個腳本

> set +f 
> fspec=XXX/YYY/server-sdk-*.jar 
> f=$(echo $(echo "$fspec")) 
> echo "$f" 
XXX/YYY/server-sdk-01.00.00-000080.000055.e0eb521.jar 

> filename="${f##*/}" 
> echo "$filename" 
server-sdk-01.00.00-000080.000055.e0eb521.jar 
> dirname="${f%/*}" 
> echo "$dirname" 
XXX/YYY 
0

簡短的回答是使用echo強制文件名擴展:

fspec=$(echo XXX/YYY/server-sdk-*.jar) 

倘若有不止一個服務器-SDK - *此目錄中的jar文件,你可以做到這一點,只選擇最新的一個:

fspec=$(ls -t XXX/YYY/server-sdk-*.jar | head -1) 
相關問題