2011-10-13 5 views
5

Sto cercando via per eseguire il comando corrente per ogni risultato del file globbing senza creare un ciclo for. L'ho visto da qualche parte ma non riesco a ricordare dove esattamente.Posso eseguire il comando per ogni risultato del file globbing in zsh senza per?

(L'eco è solo un esempio, dovrebbe funzionare anche con psql per esempio)

Esempio:

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

uscita desiderata:

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

kown modo:

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

Cou Si dovrebbe usare per. Ma forse c'è un modo per farlo più breve? Forse come usare doppie parentesi graffe attorno al glob o altro?

Grazie. :)

risposta

4

È possibile che si stia cercando zargs, un comando con lo stesso scopo di xargs ma un'interfaccia saner.

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

Grazie, sembra "sano di mente" :) –

2

Il comando printf implicitamente ciclo se dato più argomenti di segnaposto nella stringa di formato:

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

Per eseguire un comando su ogni file, è necessario xargs: presumo di avere GNU xargs che ha l'opzione -0:

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

Sostituire il comando echo xargs con tutto ciò che serve, utilizzando il "FILE" segnaposto in cui è necessario il nome del file.

Utilizzare il proprio giudizio per determinare se questo è effettivamente migliore o più gestibile di un ciclo for.

+0

Oh, bello grazie. Ma in realtà l'eco era solo un esempio. Il comando effettivo che voglio emettere è "psql ... -f $ i" :-) –

+0

@dedeibel, risposta aggiornata. –

+0

Grazie per l'aggiornamento, non specifico per zsh ma questo è bello. –