2011-10-13 8 views
5

Estoy buscando lejos para ejecutar el comando actual para cada resultado del archivo globbing sin construir un bucle for. Vi esto en alguna parte, pero no puedo recordar dónde exactamente.¿Puedo ejecutar el comando para cada resultado del archivo globbing en zsh sin?

(El eco es sólo un ejemplo, sino que también debe trabajar con psql por ejemplo)

Ejemplo:

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

salida deseada:

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

Kown manera:

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

Cou Debería hacerse usando for. Pero tal vez hay una manera de hacerlo más corto? ¿Tal como usar llaves dobles rizadas alrededor del globo o lo que sea?

Gracias. :)

Respuesta

4

Quizás esté buscando zargs, un comando con el mismo propósito que xargs pero una interfaz más segura.

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

Gracias, se ve "cuerdo" :) –

2

El comando printf implícitamente bucle si da más argumentos que los marcadores de posición en la cadena de formato:

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

para ejecutar un comando en cada archivo, es necesario xargs: supongo que tienes xargs de GNU que tiene la opción -0:

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

Reemplazar el comando xargs echo en lo que necesite, utilizando el "archivo" marcador de posición donde se necesita el nombre del archivo.

Use su propio criterio para determinar si esto es realmente mejor o más fácil de mantener que un bucle for.

+0

Oh, bueno, gracias. Pero en realidad el eco fue solo un ejemplo. El comando real que deseo emitir es "psql ... -f $ i" :-) –

+0

@dedeibel, respuesta actualizada. –

+0

Gracias por la actualización, no específica de zsh, pero eso es genial. –

Cuestiones relacionadas