Show HN: F2 – Cross-Platform CLI Batch Renaming Tool
84 ayoisaiah 12 5/24/2025, 3:49:12 PM github.com ↗
Hey HN!
I'm excited to share f2, a command-line tool I built for fast and flexible bulk renaming of files. It's cross-platform (Linux, macOS, Windows), executes a dry-run by default, supports undo, and provides great flexibility in file renaming with several built-in variables and Exiftool integration.
I hope you find it useful!
Another approach I recently discovered is an old but beautiful Unix-style tool for renaming files: vidir - edit a directory in your text editor. It’s part of the moreutils suite [1].
You get the list of filenames in your editor – edit them as you like, save, exit, and it renames the files. It uses whatever editor is set in your $EDITOR env var, so it doesn’t have to be vi/vim.
You can also pipe in a list of files, e.g. `find . -type f | vidir -`, to edit just the files you want - and you can even change paths (add, rename, remove directories) in the editor to move files around easily.
To try it quickly on macOS: `brew install moreutils`
[1] https://joeyh.name/code/moreutils/
Most important: Worked locally and did not send the filenames to chatGPT ;)
Here's some great product and UX chops, not just coding chops.
The EXIF stuff to create folders based on the date photos were taken is fantastic! https://f2.freshman.tech/guide/organizing-image-library
This tool solves a problem that I face all the time, I am definitely going to be using this often.
https://exiftool.org/geolocation.html
It only happens a few times a year that I need to batch rename. Buy when I do my adrenaline levels go up by about two espressos.
Honestly I don't see myself remembering and using the variables features(which gives the exiftool feature others here are raving about) but it's already insanely good without that. Love the ability to refine your selection with further -f flags. Also the ability to rename while create nested paths is so good.
Suggestion, having an "up"[1] mode where you can see the dry run output in a live updating thing when you are adding further -fs and -rs.
[1] https://github.com/akavel/up