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 betweenlower,upper,title(Each Word Capitalized), orcapitalize. - Word Separators (
-s,--separator) — choose how to separate words:snake(underscores),kebab(hyphens), orspace. - 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7fdf4d04d92ec9e99a897c6cbb4cc23d6554d723df5f55c440c5188f8809e665
|
|
| MD5 |
423ed4a66ee92c345e91cd08cae36299
|
|
| BLAKE2b-256 |
7ff09450fc52cd1ff911fc8f354fc6d7817f2a07f093c7325cfb4df39b48465d
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6c56bb941b86ec49ed89764be235ebb60ad6381e472d952cf7689a24df8c158e
|
|
| MD5 |
9f2f35b5a711e7d9d3949c75206067cf
|
|
| BLAKE2b-256 |
eb3e58cbdd969e7b7f7ec6f08683c1793145bab879ca39fbf8b94c2c94e1eb5e
|