2015-01-07 11 views
7

のは、私のサーバー上でそれを想像してみましょう、私は、次のファイルを持っている:bashスクリプトと正規表現の問題

[email protected]:/var/log/foo$ ls 
fooFile1 fooFile2 logFile logFile.1 logFile.2 

は、私はすべてのファイルが、ログファイルを含むアーカイブを作成したいです*。。

[email protected]:~$ tar -czf foo.tar.gz /var/log/foo/!(logFile.*)

、それが正常に動作します:だから私は、コマンドを思いつきました!同じ仕事をしてスクリプトを作成しようとしたときただし、:

#!/bin/bash 

tar -czf foo.tar.gz /var/log/foo/!(logFile.*) 

を私は次のエラーに出くわした:

./test.sh: line 3: syntax error near unexpected token '(' 
./test.sh: line 3: 'tar -czf foo.tar.gz /var/log/foo/!(logFile.*)' 

問題は(私が代わりにlsを使用して同じ問題を満たし、関連タールではありませんtar

このエラーの原因はわかりません。誰かが私が間違っている場所を教えてもらえますか?

のUbuntu 12.04で出会ったばかりシェバング以下

答えて

7

置き、この行を:あなたのスクリプトで拡張されたグロブオプションを有効にする

shopt -s extglob 

!(logFile.*)は、このオプションは動作の違いの原因であるインタラクティブシェルではデフォルトで有効になっていることを明確に指摘する価値あるextglob

+4

を有効にする必要が拡張されたグロブパターンです。 –

+1

私はそれについてもっと調べる必要があります。両方のおかげで! –