2013-12-09 52 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) 
相关问题