Ubuntuターミナルで以下のコードを使用すると、正常に動作します。
rm !(*.sh) -rf
しかし、同じ行コードをシェルスクリプト(clean.sh)に配置し、ターミナルからシェルスクリプトを実行すると、エラーがスローされます。
clean.shスクリプト:
#!/bin/bash
rm !(*.sh) -rf
私が得るエラー:
./clean.sh: line 2: syntax error near unexpected token `('
./clean.sh: line 2: `rm !(*.sh) -rf'
手伝ってくれますか?
rm !(*.sh)
はextglob
、.sh
拡張子が付いているファイルを除くすべてのファイルを削除することを意味する構文です。
インタラクティブbash
インスタンスでは、シェルオプションextglob
がオンになっています:
$ shopt extglob
extglob on
スクリプトがサブシェルで実行されているのでextglob
、スクリプトの開始時にこれを追加して有効にする必要があります。
shopt -s extglob
したがって、スクリプトは次のようになります。
#!/bin/bash
shopt -s extglob
rm -rf -- !(*.sh)
編集:
.sh
拡張機能以外のすべてのファイルを削除するには、GLOBIGNORE
(有効にしたくないためextglob
)を使用します。
#!/bin/bash
GLOBIGNORE='*.sh'
rm -rf *
例:
$ ls -1
barbar
bar.sh
egg
foo.sh
spam
$ GLOBIGNORE='*.sh'
$ rm *
$ ls -1
bar.sh
foo.sh
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加