从文件名获取版本

时间:2013-04-20 12:25:51

标签: linux bash

我正在创建一个列出所有jboss版本的脚本。但是我遇到了一个问题 Jboss通常有不同的版本名称 jboss-4.0.0.tar.gz
jboss-4.0.4.GA.tar.gz

我设法获得了版本(例如4.0.0或4.0.4)。但我需要获得所有版本4.0.4.GA

ls -1 | grep jboss |sed -r 's/^.*-([0-9.]+)\..*/\1/'

感谢

2 个答案:

答案 0 :(得分:1)

不要解析ls输出。

ls是用于交互式查看文件信息的工具。它的输出格式化为人类,并将导致脚本中的错误。使用globs(就像我在这里)或find代替。了解原因:http://mywiki.wooledge.org/ParsingLs

$ ls -1
jboss-4.0.0.tar.gz
jboss-4.0.4.GA.tar.gz
foobar

使用

 $ printf -- '%s\n' * | grep -oP 'jboss-\K.*(?=\.tar\.gz)'

或使用

$ printf -- '%s\n' * | awk -F'jboss-|.tar.gz' '/jboss/{print $2}'

或使用

printf -- '%s\n' * | perl -lne '/jboss-(.*?)\.tar\.gz/ && print $1'

输出

4.0.0
4.0.4.GA

答案 1 :(得分:0)

$ cat test.sh
#!/bin/bash

for file in jboss-*.tar.gz; do
        [ -f "${file}" ] || continue
        version="${file#*-}"
        version="${version%.tar.gz}"
        echo "${version}"
done

示例:

$ find
.
./test.sh
./jboss-4.0.0.tar.gz
./jboss-4.0.4.GA.tar.gz

$ ./test.sh
4.0.0
4.0.4.GA