2015-11-08 278 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工作正常。 –