zsh, dosya seçmek için bash’ten biraz daha gelişmiş operatörlere sahip. Bunlar sayesinde bir defada bir dizindeki dosyaların tamamına erişip onlar üzerinde işlemler yapmak mümkün. Burada kısa bazı örnekler vereceğim.
Bir dizindeki tüm dosyalar: ls *
Bulunduğumuz dizin ve tüm alt dizinlerdeki dosyalar: ls **/*
Son iki haftada değiştirilmiş dosyalar: ls **/*(.mw-2)
Boyutu 100 MB’tan büyük olan dosyalar: ls **/*(.Lm+100)
Sadece okunabilir olan dosyalar: ls **/*(.R)
/etc dizininde dünya tarafından yazılabilir olan dosyalar: ls /etc/**/*(.W)
/etc dizininde son bir haftada değiştirilmiş ve dünya tarafından yazılabilir olan dosyalar: ls /etc/**/*(.Wmw-1)
zsh’in sağladığı bu gibi seçeneklerin yanında dosya adını parçalamak da kolay. Örneğin dosyanın uzantıdan önceki kısmını almak için *(:r) yazıyoruz. Dizindeki jpg dosyalarını ImageMagick’in convert programıyla aynı isimli png dosyalarına çevirmek şöyle mümkün:
for f in **/*.jpg(.) ; do
convert ${f:r}.jpg ${f:r}.png
done
Burada anlatılanları find yoluyla yapmak da mümkün ancak çok daha uzun sürebiliyor. Bilhassa dosya adlarını parçalamak, dönüştürmek gibi işlemleri yaparken zsh’in nimetleri çok. Tek satırlık bir operasyonla çok güçlü bazı dönüşümler yapabilmek mümkün.