如何从文件列表中获取文件名

时间:2013-12-09 19:15:33

标签: shell

所以情节如下:

我需要编写一个自动脚本,从目录中选择jar文件。但jar文件将定期用新的jar文件替换

例如:XXX / YYY / server-sdk-01.00.00-000080.000055.e0eb521.jar

server-sdk部分一直是常量,但版本编号的其余部分会发生变化。

如何在此方案中读取文件名并将其保存到变量中。

我试过

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

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

但是在这里我只得到server-sdk - * .jar作为文件名,我希望它是server-sdk-01.00.00-000080.000055.e0eb521.jar。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

简短的回答是使用echo强制扩展文件名:

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

如果此目录中有多个server-sdk - * .jar文件,您可以执行此操作以仅选择最新的:

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