2011-10-13 7 views
5

Poszukuję odejścia, aby wykonać bieżące polecenie dla każdego wyniku globowania pliku bez budowania pętli for. Widziałem to gdzieś, ale nie pamiętam gdzie dokładnie.Czy mogę wykonać polecenie dla każdego wyniku pliku globbing w zsh bez for?

(echo jest tylko przykładem, należy również pracować z psql na przykład)

przykład:

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

sygnał wyjściowy:

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

kown sposób:

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

Cou Zrobimy to za pomocą. Ale może jest jakiś sposób, aby zrobić to krócej? Może lubisz używać podwójnych nawiasów klamrowych na całym globusie?

Dzięki. :)

Odpowiedz

4

Być może szukasz zargs, polecenia o tym samym celu, co xargs, ale interfejsu sanera.

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

Dzięki, wygląda "normalnie" :) –

2

Komenda printf niejawnie pętlę jeśli podano więcej argumentów niż zastępcze w ciągu formatu:

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

do wykonania polecenia na każdego pliku, trzeba xargs: Zakładam, że masz xargs GNU, które ma opcja -0:

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

Wymień komendę echo xargs z czegokolwiek potrzebujesz, przy użyciu „PLIK” zastępczy gdzie trzeba nazwę pliku.

Skorzystaj z własnego osądu, aby określić, czy jest on rzeczywiście lepszy, czy łatwiejszy do utrzymania niż pętla for.

+0

Och, miłe dzięki. Ale w rzeczywistości echo było tylko przykładem. Właściwym poleceniem, które chcę wydać, jest "psql ... -f $ i" :-) –

+0

@dedeibel, odpowiedź zaktualizowana. –

+0

Dzięki za aktualizację, nie zsh specyficzne, ale to fajne. –