2011-10-13 9 views
5

私は、forループを構築することなく、グロブファイルの各結果のために、現在のコマンドを実行するために離れて探しています。私はこれをどこかに見ましたが、正確にどこを覚えていないのですか。は私がのためにすることなく、zshの中グロブファイルの各結果のためにコマンドを実行することはできますか?

(エコーは一例であり、それはまた、例えばpsqlで動作するはず)

例:

$ touch aaa bbb ccc ddd 
$ echo "--- " [a-c]* 
--- aaa bbb ccc 

所望の出力:

--- aaa 
--- bbb 
--- ccc 

Kown方法:

$ for i in [a-c]*; do echo "--- " $i ; done 
--- aaa 
--- bbb 
--- ccc 

COU 〜のために使用してください。しかし、もっと短くする方法があるかもしれませんか? globの周りに二重中括弧を使用したり、何でも構いませんか?

ありがとうございました。 :)

答えて

4

あなたはxargsと同じ目的を持つコマンドであるが、sanerインターフェイスを探している可能性があります。zargs

autoload -U zargs 
zargs -n 1 -- * -- mycommand 
+0

ありがとうございました。 –

2

printfコマンドう暗黙的にループフォーマット文字列内のプレースホルダよりも多くの引数を指定した場合:

printf -- "--- %s\n" [a-c]* 

各ファイルに対してコマンドを実行するには、xargsを必要とする:私はあなたのGNU xargsのを持っていると仮定していること-0オプションは:

printf "%s\0" [a-c]* | xargs -0 -I FILE echo aa FILE bb 

は、ファイル名を必要とする「FILE」プレースホルダを使用して、何が必要でecho xargsのコマンドを交換してください。これは実際にはforループよりも良いか、より保守であれば

を判断するために、独自の判断を使用してください。

+0

ああ、素敵な1つの感謝。しかし、実際にエコーは単なる例でした。私が発行する実際のコマンドは、 "psqlの... -f $ i" の:-) –

+0

@dedeibel、答えの更新です。 –

+0

zsh特有のものではなく、すばらしいものです。 –

関連する問題