

In my case this was because I wanted them as Sass partials, which are designated with the underscore. Each thing we ‘captured’ is represented by a $ in the second set of quotes, so you can see in this case that not only did I change the file extension, I added a proceeding _ before it.

Then we can manipulate what we have ‘captured’ in the second set of quotes. Each is within a set of parenthesis, the first is the file path, (**/) and the second the file name, (*). Within the first one, zmv is letting us do two sets of replacements/groups. Zmv lets us swap one thing with another, so everything in the first set of quotes with everything in the second set of quotes. But don’t go doing that yet!! zmv '(**/)(*).css' '$1_$2.scss' The basics of how zmv works First, get into a parent folder of all the files you want to rename. Now, I’ll show you the command that did my bidding, and then hopefully explain what’s going on. First you will need to load the zmv function by running autoload zmv from the command prompt.

So assuming you have ZSH, let’s take a look at what we can do.

It’s the default shell in macOS these days so if you are on Catalina onwards – you already have it. So, as zmv requires ZSH shell, at the risk of stating the obvious, you’ll need a ZSH shell. So, to reiterate my my use case, I had a project where I wanted to change all files ending in. Turns out this is a great little tool I’d not used before, and as it met my needs beautifully, I thought I’d give a brief overview for my future self and any passing travellers. It was suggested I look at zmv which works in the ZSH shell. So I happened to ask in the Sublime Text Discord how people did this. I didn’t fancy renaming them ‘by hand’, and the Finder batch rename is only really useful when all the files are in one folder and/or you can easily select them all. There were around a hundred files nested in many different sub-folders. I had a situation today where I wanted to migrate a large-ish codebase from standard CSS files to Sass files with a *.scss file extension. This is a quick tip rather than an involved tutorial.
