2015-11-08 275 views
-1

我对shell脚本非常陌生,因此我现在对它不太了解。 我有一个应用程序,它创建一个半名未知的java文件,现在我尝试写一个脚本,它需要这个名字。
文件的已知名称是/target/plugin-<dyn>.jar,<dyn>部分是未知的,可能几乎任何东西(顺便说一下,它主要是一个版本号与可变文本部分)。
现在我想将plugin-<dyn>(不含.jar)保存在变量中供以后使用。我在网上看了很多,但我找不到解决方案。Shell脚本 - 获取动态生成文件的名称

回答

1

如果您需要获取没有扩展名的文件名.jar。你可以参考我下面的bash脚本:

# for loop all files in target directory that matched plugin-*.jar 
for f in target/plugin-*.jar 
do 
    # print file name without extension .jar 
    echo ${f%.*} 
done 

更新:

# for loop all files in target directory that matched plugin-*.jar 
for f in target/plugin-*.jar 
do 
    # print file name without extension .jar 
    filename="${f##*/}" # get plugin-*.jar 
    echo ${filename%.*} # print plugin-* without jar 
done 
+0

需要添加'shopt -s nullglob'作为没有匹配的情况。 –

+0

这也返回路径'./target/',但我只需要文件名 – Sumafu

+0

我找到了一个解决方案,首先用cd进入目录,之后我用cd回到父目录 – Sumafu

0

试试这个

filename="/target/plugin-<dyn>.jar" 
echo ${filename} | awk -F [/.] '{print $(NF - 1)}' 
echo ${filename} | sed 's/.*\/\([^/]*\)\.jar/\1/' 

但如果<dyn>有一个斜线,逗号或点。它可能不起作用

+0

这部分将会有点在我的情况下 – Sumafu

+0

@Sumafu sed工作正常。 –