to load zmv : autoload -U zmv zmv is a module that allow people to do massive rename. The first option to know about zmv is the -n option that will show what will be done without being executed. to rename a class music files which names are la like this : artist - album - track - title.ogg : zmv '(*) - (*) - (*) - (*).ogg' '$1/$1 - $2/$1 - $2 - $3 - $3.ogg' the "artist/artist - album/" repository should already exist the file will keep the same name and be moved to that repository. to recursively do the same zmv '(**/)(*) - (*) - (*) - (*).ogg' '$1/$2/$2 - $3/$2 - $3 - $4 - $5.ogg' Of course we can use globbing. For example, rename all the avi files to replace _ by simple spaces, replace '.' by simple spaces lowercase the filename, and capitalise the first letter of each words : zmv '(*).avi' '${${(LC)1//./ }//_/ }.avi' If you want case insensitivity pattern matching you can add (#i) at the begining of the first sentence for exemple zmv '(#i)(*).avi' '${${(LC)1//./ }//_/ }.avi' All files having for extenstions .avi or .Avi or .AVI or etc. will match and will be renamed as previously. You can find more information here : http://strcat.de/zsh/#zmv