2017-01-26 3 views
0

を扱う場合、私は.TGZ圧縮ファイルの数千人を持っているUNIXでのディレクトリを持って、彼らはこのパターンに従います。シェルスクリプト - ファイル名のパターン

01.red.something.tgz 
02.red.something.tgz 
03.red.anything.tgz 
04.red.something.tgz 
01.blue.something.tgz 
02.blue.everything.tgz 
03.blue.something.tgz 
04.blue.something.tgz 
01.yellow.something.tgz 
02.yellow.blablathing.tgz 
03.yellow.something.tgz 
04.yellow.something.tgz 

彼らは、ファイルシステムから大量に使用している、と私は必要ファイル自体を抽出せずにそれらを一覧表示する。実際には時間がかかるので、このシェルスクリプトは必要に合っていると思います。私はシェルスクリプトにちょっと新たなんだ、私はこの.SH

$pattern = "red" 

for file in *.tgz 
do 

    if [[ ${file} == '...${pattern}.*.tgz' ]]; then 
     echo" ==> ${file} match the pattern and the output dir is : out/" 
     tar -tf $file > ./out/$file 
    else 
     echo "${file} Doesn't match the pattern" 
    fi 
done 

を作ったが、私はかの部分で間違った何かを作った、とパターンが一致した場合でも、私はしましたので、学んでいます'はパターンと一致しません'というメッセージが表示されます。

の場合はちょっと単純ですが、なぜこのフェラが動作しないのか理解できません。あなたがなぜこれがうまくいかないのか説明できるなら、私は感謝しています。

ありがとうございます。

+0

'== '一致演算子はありません。 'globing 'を読み込み、forループの' *。$ {pattern}。*。tgz'を直接使用してください –

+0

ありがとう、私はこれについていくつかの検索をします – Imkls

答えて

1

あなたは'があってはならないあなたがbashでvaribalesを作成するときifで、スペースに注意する必要があります - あなたは、regex
使用を一致させたい場合は、二重引用符 - 単一引用符や"if [[ ${file} == ${regEx} ]];

テスト:

$ ls *.tgz 
01.red.something.tgz 01.yellow.something.tgz 
$ ./t.sh 
==> 01.red.something.tgz match the pattern and the output dir is : out/ 
01.yellow.something.tgz Doesn't match the pattern 

$ cat t.sh 
#!/bin/bash 

pattern="red" 
regEx="*.${pattern}.*.tgz" 

for file in *.tgz 
do 
    if [[ ${file} == ${regEx} ]]; then 
     echo " ==> ${file} match the pattern and the output dir is : out/" 
     #tar -tf $file > ./out/$file 
    else 
     echo "${file} Doesn't match the pattern" 
    fi 
done 
+0

友人に感謝します、それは魅力的です。私はそのコンセプトを理解し、次回は気づくでしょう。 :) – Imkls

+0

偉大な - これを回答として受け入れることを検討し、投票:)[私の質問に誰かが答えるときに私はどうすればよいですか?](http://stackoverflow.com/help/someone-answers) –

関連する問題