2012-04-04 31 views
-1

我想从下面的字符串中只提取tar.gz如何在shell脚本的文件中单独获取扩展名?

/root/abc/xzy/file_tar_src-5.2.8.23.tar.gz 

/root/abc/xyz/file_tar_src-5.2.tar.gz 

/root/abc/xyz/file_tar_src-5.tar.gz 

了所有这些字符串(还有更多),我只需要tar.gz我如何提取他们不关心点的数量他们。我需要将tar.gz放入一个变量中。

+5

什么如果文件名结束'.tar.bz2',会发生什么?你还想要'tar.gz'还是你想要'.tar.bz2'?如果您只使用'tar.gz',则不需要获取扩展名;你知道它是'tar.gz'。 'file.c'会发生什么?扩展名是'.c'还是'file.c',或者它是无效的,因为名称中只有一个点?你有没有需要前缀,非扩展?或者你的意思是'除了后面的'tar.gz'之外的所有东西吗?你想要终端点吗? – 2012-04-04 01:05:47

回答

1

我真的不明白,为什么你只需要tar.gz

$ x=/root/abc/xyz/file_tar_src-5.tar.gz 
$ y=${x##*[0-9].} 
$ echo $y 
tar.gz 

或者:

$ x=/root/abc/xyz/file_tar_src-5.tar.gz 
$ y=`echo $x | grep -o 'tar\.gz$'` 
$ echo $y 
tar.gz 
+0

这只适用于文件名以数字结尾的情况。 – 2012-04-04 01:23:23

1

这很棘手,因为您不希望版本号匹配。我们需要比普通通配符更多的权力。我们可以使用bash的内置=~正则表达式来完成工作。

$ filename='/root/abc/xzy/file_tar_src-5.2.8.23.tar.gz' 
$ [[ $filename =~ \.([^0-9]*)$ ]] 
$ ext=${BASH_REMATCH[1]} 
$ echo "$ext" 
tar.gz 
0

不知道你寻找什么。您是否试图确定文件是否以tar.gz结尾?

if [[ $filename == *.tar.gz ]] 
then 
    echo "$filename is a gzipped compressed tar archive" 
else 
    echo "No, it's not" 
fi 

你试图找到后缀是否是tar.gztar.bz2或只是简单的tar

$suffix=${file##*.tar} 
if [[ "$suffix" = "$file" ]] 
then 
    echo "Not a tar archive!" 
else 
    suffix="tar.$suffix" 
    echo "Suffix is '$suffix'" 
fi 

你的后缀有兴趣,但如果它是一个tar.gz,你要考虑的是,后缀:

filename='/root/abc/xzy/file_tar_src-5.2.8.23.tar.gz' 
suffix=${filename##*.} #This will be gz or whatever the suffix 
rest_of_file=${filename%%.$suffix} #This is '/root/abc/xzy/file_tar_src-5.2.8.23.tar' 

# See if the rest of file has a tar suffix. 
# If it does, prepend it to the current suffix 
[[ $rest_of_file == *.tar ]] && suffix="tar.$suffix" 

echo "The file suffix is '$suffix'" 
0

粉粉:

pathname="/root/abc/xzy/file_tar_src-5.2.8.23.tar.gz" 

IFS='.'        # field separator 
declare -a part=(${pathname})  # split into an array 
ext2="${part[*]: -2}"     # use the last 2 elements 
echo -e "${ext2}" 
1
$ f='/root/abc/xzy/file_tar_src-5.2.8.23.tar.gz' 
$ [[ $f =~ [^.]+\.[^.]+$ ]] && echo ${BASH_REMATCH[0]} 
tar.gz 
相关问题