2012-04-04 9 views
-1

以下の文字列からtar.gzのみを抽出したいと思います。すべてのこれらの文字列(および多く)のうちシェルスクリプト内のファイル内で拡張機能を単独で取得する方法は?

/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'ですか、名前にドットが1つしかないので無効ですか?接頭辞、非拡張子が必要ですか?それとも、後ろの 'tar.gz'を除いて全てを得るのですか?あなたはターミナルのドットが欲しいですか? –

答えて

1

私は本当に理解していない:

$ 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

これは、ファイル名が数字で終わる場合にのみ有効です。 –

1

バージョン番号が一致するとは思わないので、難しいです。単純なワイルドカードよりも力が必要です。 bashの組み込みの=~ regex演算子を使用して、作業を完了できます。あなただけtar.gz必要がある理由

$ 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 
関連する問題