2011-10-13 20 views
5

Örme döngüsü oluşturmadan, globbing dosyasının her sonucu için geçerli komutu yürütmek üzere arıyorum. Bunu bir yerlerde gördüm ama tam olarak nerede olduğunu hatırlayamıyorum. Zsh dosyasındaki her sonuç için komutu zsh olarak uygulayabilir miyim?

(yankı, aynı zamanda, örneğin psql'in ile çalışmalıdır sadece bir örnektir)

Örnek:

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

İstenen çıkış:

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

kown yol:

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

Cou Kullanmak için bitti. Ama belki daha kısa yapmak için bir yolu var mı? Belki de küre üzerinde çift kaşlı ayraçlar kullanmak ister misin?

Teşekkürler. :)

cevap

4

zargs, xargs ile aynı amaca sahip bir komut ama saner bir arabirim arıyor olabilirsiniz.

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

Teşekkürler, "sane" görünüyor :) –

2

printf komut biçim dizesi yer tutucular daha fazla argüman verilirse örtük döngü olacaktır: Eğer xargs

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

her dosya üzerinde bir komut uygulamak için gerekir: Ne var GNU xargs var varsayalım -0 seçeneği:

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

Eğer dosya ihtiyaç "FILE" yer tutucu kullanılarak, nasıl istersen ile echo xargs komutu değiştirin.

Bunun gerçekten iyi olup olmadığını belirlemek için kendi kararınızı kullanın.

+0

Oh, teşekkürler. Ama aslında yankı sadece bir örnekti. Vermek istediğim asıl komut "psql ... -f $ i" :-) –

+0

@dedeibel, yanıt güncellendi. –

+0

Güncelleme için teşekkürler, zsh'a özgü değil ama bu harika. –