[HN Gopher] Show HN: F2 - Cross-Platform CLI Batch Renaming Tool
       ___________________________________________________________________
        
       Show HN: F2 - Cross-Platform CLI Batch Renaming Tool
        
       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!
        
       Author : ayoisaiah
       Score  : 88 points
       Date   : 2025-05-24 15:49 UTC (7 hours ago)
        
 (HTM) web link (github.com)
 (TXT) w3m dump (github.com)
        
       | simonw wrote:
       | I really like your CLI design here, clearly extremely well
       | thought out, lots of great taste on display here:
       | https://f2.freshman.tech/guide/tutorial
       | 
       | 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.
        
         | ayoisaiah wrote:
         | Thanks a lot Simon! I'm really thrilled to hear it's hitting
         | the mark for you :)
        
       | otterpro wrote:
       | Wow, it can integrate with exiftool. I use exiftool to rename
       | photo files, but I think f2 offers more flexible renaming
       | features.
        
       | nine_k wrote:
       | Dry-run by default! Use of metadata like EXIF! _Undo!_
       | 
       | Here's some great product and UX chops, not just coding chops.
        
       | bsnnkv wrote:
       | Incredible name choice here - it's very rare that I get this
       | feeling associating a new project with its name. I'm filled with
       | feelings that touch on nostalgia, utility, UX design history and
       | computing heritage when I hear the name F2 associated with a
       | batch renaming tool. Great job!
        
         | ayoisaiah wrote:
         | Thank you! I knew I had a winner the moment it popped into my
         | head :)
        
       | sorenjan wrote:
       | For photos, I'm guessing you can use Exiftool's built in
       | geolocation feature to add the city and country first.
       | 
       | https://exiftool.org/geolocation.html
        
       | devrandoom wrote:
       | Wow, this goes instantly to my toolbox. Thanks for writing this
       | and sharing it!
       | 
       | 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.
        
       | sandreas wrote:
       | Awesome tool, thanks for sharing. One feature I would love to see
       | on renaming tools is the following:                 -A - Sample
       | of the of the ACTUAL file name       -B - Sample of the desired
       | filename
       | 
       | e.g.                 f2 -A 001.pdf -B 001_renamed.pdf
       | 
       | and this would automatically determine that every file with this
       | "pattern" (001) should get the renamed prefix, so:
       | 001.pdf => 001_renamed.pdf       002.pdf => 002_renamed.pdf
       | ...
       | 
       | Sounds weird, but there once was a tool written in dotnet that
       | used machine learning techniques to achieve exactly this and it
       | worked like a charm. Unfortunately I lost the reference and never
       | found it again.
       | 
       | Most important: Worked locally and did not send the filenames to
       | chatGPT ;)
        
         | ayoisaiah wrote:
         | You can already do this with F2 by using capture variables:
         | f2 -f '(\d+).pdf' -r '{$1}_renamed.pdf'
         | 
         | Does that align with what you're looking for?
        
       | 037 wrote:
       | Very interesting, I'll definitely give it a try!
       | 
       | 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/
        
         | ddlsmurf wrote:
         | if you can forgive a shameless plug, I wrote
         | https://github.com/ddlsmurf/fled some time ago and it serves me
         | very well to this day. (It's not half as advanced as OP's tool
         | but still useful)
        
       | porridgeraisin wrote:
       | Really nice, wow.
       | 
       | 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
        
       | batrat wrote:
       | In windows I use PowerToys - power rename to rename files. But
       | I'm not a power user I rarely need renaming something.
        
       | hoppp wrote:
       | The undo functionality is a nice touch. I know cuz I write
       | scripts to rename files and made mistakes before.
        
       ___________________________________________________________________
       (page generated 2025-05-24 23:00 UTC)