2012-04-04 32 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 
相關問題