Skip to main content

File Normalizer (filenorm)

A lightweight, cross-platform command-line utility for cleaning up and normalizing file names.

filenorm standardizes file names by configuring case styles, word separators, adding custom prefixes/suffixes, transliterating characters, and keeping complex extensions safe.

Features

  • Flexible Case Styles (-c,--case) — choose between lower, upper, title (Each Word Capitalized), or capitalize.
  • Word Separators (-s,--separator) — choose how to separate words: snake (underscores), kebab (hyphens), or space.
  • Prefixes & Suffixes (-p,-x,--pref,--suf,--prefix, --suffix) — add a fixed text at the beginning or end of each file (suffixes are smartly placed before the extension).
  • Smart Extension Protection — ensures transformations apply only to the file name while keeping complex/compound extensions (like .tar.gz, .user.js, .d.ts) safe and untouched.
  • Transliteration — automatically converts non-Latin characters (like Cyrillic, Chinese, etc.) into standard Latin script using unidecode.
  • Special character removal — removes unsupported or disruptive characters.
  • Recursive mode (-r) — processes files inside nested directories.
  • Dry-run mode (-d) — previews changes without renaming anything.
  • Windows installation (-i,--install) — automatically copies the executable and adds it to the user's PATH environment variable.

Installation

Option 1: Install with pip — (Recommended for all systems)

Download Python + add to Environment Variables Path.

If you have Python and pip installed, you can install filenorm globally in an isolated environment:

Check downloads

python --version
pip --version

Install from repo

pip install git+https://github.com/alanarzumanjan/file-normalizer.git

You can install filenorm directly from PyPI:

pip install filenorm

Option 2: Standalone binaries

No Python installation is required when using the pre-compiled binaries.

Download the latest release from the GitHub Releases page.

Available binaries:

  • Linux: filenorm-linux-amd64
  • MacOS: filenorm-macos-universal

For macOS & Linux: Download the binary and the install.sh script into the same folder, open your terminal there, and run:

bash install.sh
  • Windows: filenorm-windows-amd64.exe

For Windows: Open a Downloads directory - cd $HOME\Downloads in PowerShell and write:

.\filenorm-windows-amd64.exe --install

Option 3: Install for development

Clone the repository and install the package in editable mode:

git clone https://github.com/alanarzumanjan/file-normalizer.git
cd file-normalizer
pip install -e .

Usage

filenorm [path] [options]

Arguments

Argument Description
path Target directory. Defaults to the current working directory.

Options

Option Description
-h, --help Show the help message and exit.
-r, --recursive Process files in nested directories recursively.
-d, --dry-run Preview changes without renaming files.
-c, --case {lower,upper,title,capitalize} Text casing style (default: lower).
-s, --separator {snake,kebab,space} Word separator style (default: snake)
-p,--pref, --prefix TEXT Add a fixed prefix to file names.
-x,--suf,--suffix TEXT Add a fixed suffix to file names (before extension).
-i, --install automatically copies the executable and adds it to the user's PATH environment variable(Windows)

Examples

Preview changes

Preview the changes that would be made in the current directory without modifying any files:

filenorm --dry-run

Normalize recursively

Process files in the target directory and all nested directories:

filenorm /path/to/your/music --recursive

Use Custom Case and Separators

Convert names to Title Case with hyphens (kebab):

filenorm --case title --separator kebab

Add Prefixes and Suffixes

Add a date prefix and a version suffix to all files:

filenorm --prefix "2026-08-" --suffix "-final"

All Combination

filenorm /path/to/your/files --recursive --case title --separator kebab --prefix "project-" --suffix "-v1" --dry-run

or Shortened Command Version

filenorm /path/to/your/files -r -d -c title -s kebab -p "project-" -x "-v1"

Current Directory Target

filenorm . 

Rebuild config

Rebuild in root repo directory

pip uninstall filenorm
pip install -e .

Why filenorm?

Messy file names can make scripts, backups, automation, and cross-platform workflows unnecessarily difficult.

filenorm provides a simple way to turn inconsistent file names into predictable, cleaner names from the command line.

License

This project is open-source and available under the License.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

filenorm-1.3.3.tar.gz (10.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

filenorm-1.3.3-py3-none-any.whl (8.6 kB view details)

Uploaded Python 3

File details

Details for the file filenorm-1.3.3.tar.gz.

File metadata

  • Download URL: filenorm-1.3.3.tar.gz
  • Upload date:
  • Size: 10.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.7

File hashes

Hashes for filenorm-1.3.3.tar.gz
Algorithm Hash digest
SHA256 7fdf4d04d92ec9e99a897c6cbb4cc23d6554d723df5f55c440c5188f8809e665
MD5 423ed4a66ee92c345e91cd08cae36299
BLAKE2b-256 7ff09450fc52cd1ff911fc8f354fc6d7817f2a07f093c7325cfb4df39b48465d

See more details on using hashes here.

File details

Details for the file filenorm-1.3.3-py3-none-any.whl.

File metadata

  • Download URL: filenorm-1.3.3-py3-none-any.whl
  • Upload date:
  • Size: 8.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.7

File hashes

Hashes for filenorm-1.3.3-py3-none-any.whl
Algorithm Hash digest
SHA256 6c56bb941b86ec49ed89764be235ebb60ad6381e472d952cf7689a24df8c158e
MD5 9f2f35b5a711e7d9d3949c75206067cf
BLAKE2b-256 eb3e58cbdd969e7b7f7ec6f08683c1793145bab879ca39fbf8b94c2c94e1eb5e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page