2016-05-23 10 views
-1

マウントされた( - バインド)サブディレクトリーを含むいくつかのディレクトリーを削除したいとします。私は.duという名前のスクリプトファイルのforループを使用します。Bash:プレースホルダーでファイルを反復する

for dirname in $1; do                                   
    sudo umount $dirname/images/Spielplatz 
    sudo umount $dirname/sounds/Spielplatz 
    sudo rm -r $dirname 
done 

私は "テスト" で始まるすべてのディレクトリを削除するには

.du Test* 

でスクリプトファイルを呼び出します。しかし、最初のものだけが削除されます。だから私は.duすべてのディレクトリに呼び出す必要があります。

1回の呼び出しですべてを処理するには、どうすればいいですか?

+1

@WalterA、絶対に '$ *'ではありません。あなたの名前に空白があると恐ろしいほど壊れてしまいます。 –

+1

ところで、他のバグもあります。 'rm -r $ dirname'はすべての可能な名前であなたが望むように動作しません。信頼できるように、$ dirname/images/Spielplatz "と' rm -r - "$ dirname" 'を引用符で囲み、http://shellcheck.net/からスクリプトを実行することを検討してくださいそのような問題を抱えている。 –

答えて

1

UNIXでは、DOS/Windowsと異なり、glob式はに展開され、より前にプログラムが開始されます。したがって:

.du Test* 

.du Test1 Test2 Test3のようなものが実行されます(グロブに一致するファイルの場合)。したがって、$1Test1を指し、$2Test2などとなります。プログラムは、もともとコマンドラインでTest*で呼び出されたことを知る方法がありません。それが与えられたのは、展開後の配列だけです。

この配列のすべての要素を反復処理するには、使用:

for dirname in "[email protected]"; do 
1

あなたが求めている正確に何やっている - $1は、最初の引数です。すべての引数をループする際、"[email protected]"を使用します。あなたも、それがデフォルトなので、これを除外することが許可されている

for dirname in "[email protected]"; do 

for dirname; do 
関連する問題