A lightweight, powerful batch renaming and filesystem organizing CLI tool.
Project description
Reny
A lightweight, fast, and safe batch renaming and filesystem organization tool.
Background
reny was originally created as the renamer component inside the larger batchmp (Batch Media Processing) suite. It was spun off into its own standalone package to provide for an ultra-lightweight, safe, pure-filesystem organizing tool without FFmpeg / Mutagen media dependencies.
If you need advanced media operations (like denoising, cover-art extraction, or format transcoding), check out the original batchmp project. If you just need to safely organize your files with surgical precision, reny is all you need.
Installation
You can safely install reny from the PyPI package using pipx:
pipx install reny
(Note: If this is your first time using pipx, you may need to run pipx ensurepath once to ensure the installed tools are available in your terminal).
Features
- Virtual Views: Preview how a directory structure would look when reorganised by type, size, or date without moving or changing anything
- Indexing: Multi-level indexing across nested directories, supporting multiple indexing schemes
- Padding: Automatically pad existing numbers in filenames with leading zeros to fix sorting orders
- Flattening: Safely collapse nested directory structures into a single folder
- Regex Replacement: Powerful batch renaming using standard regular expressions
- Dry-Run by Default:
renywill always visualize targeted changes and ask for confirmation before it ever touches your files
Examples
Basic Operations
Print current directory structure:
reny
(Without arguments, reny defaults to the print command)
Add a sequential index to all .txt files recursively:
reny -r -in '*.txt' index
Limit Recursion Depth (-el):
Use -el (end level) to control exactly how deep reny recurses. For example, to add an index only to files inside immediate subdirectories (depth 1), while ignoring deeper nested folders:
reny -r -el 1 index
Pad existing numbers with leading zeros (e.g., 2 kms.png becomes 02 kms.png):
reny pad -md 2
Regex Replace: Change spaces to underscores in all filenames:
reny replace -fs ' ' -rs '_'
Advanced Operations & Virtual Views
Flattening nested directories: Collapse all sub-directories and bring their files up to the current folder level:
reny flatten
Organize by File Type:
Move files into sub-directories grouped by their file extension (e.g., png/, pdf/):
reny organize -b type
Virtual Views (Dry-Run Preview): Preview how files would look if organized by year and month, without actually moving any files on your drive:
reny print -b date --date-format "%Y/%m"
Virtual view by date:
~/Downloads
|- 2025/
|- 01/
|- document.pdf
|- 02/
|- image.png
Real-World Scenario: Downloads Cleanup
A safe, two-step workflow to tame a chaotic downloads folder by grouping files by their extension and sorting them by size to see what's eating up your disk space.
Step 1: Preview the cleanup with size statistics (Shows you the largest file categories first, without moving any files)
reny -s sd print -b type -ss
Step 2: Commit the organization (Actually moves the files into their respective subdirectories)
reny organize -b type
Documentation & Tutorials
Although reny is a standalone project, its core organizing logic is inherited directly from batchmp. You can find detailed tutorials and deep-dives on how to master its capabilities in the original blog posts:
- Renamer Organize & Virtual Views – Highly recommended reading for mastering virtual directory views
- BatchMP Tools Tutorial, Part II: renaming files with renamer
- Practical BatchMP Series
Usage
Run reny --help to see all available filesystem operations!
Development
To set up the project for development:
- Clone the repository and navigate into it:
git clone https://github.com/akpw/reny.git cd reny
- Create and activate a virtual environment:
python3 -m venv .venv source .venv/bin/activate
- Install the project in editable mode along with testing dependencies:
pip install -e ".[test]"
Running Tests
The project uses pytest for its test suite. Because reny performs real filesystem operations, the tests are designed to dynamically create and clean up safe temporary sandbox folders during execution.
To run the full test suite:
pytest -v --tb=short tests/
To run a specific test file:
pytest tests/fs/test_fs_organize.py
Project details
Release history Release notifications | RSS feed
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 reny-1.0.1.tar.gz.
File metadata
- Download URL: reny-1.0.1.tar.gz
- Upload date:
- Size: 46.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7540b30c7a225d1ac2ed5adad87a9a0e1e3f51fd8dbe88ee8bb547b54e9ee06e
|
|
| MD5 |
6aa81bab60932311ef61043dc0f53636
|
|
| BLAKE2b-256 |
905985413453fc908dab548e4dbae42dab25a5006501b8fd4e6dd4483233a3c7
|
File details
Details for the file reny-1.0.1-py3-none-any.whl.
File metadata
- Download URL: reny-1.0.1-py3-none-any.whl
- Upload date:
- Size: 59.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2afffa8d0c3496f9fc4c2a48a279530d944b5edbe54816017d778e90403dfb1d
|
|
| MD5 |
d87129a26ee403ffe7ebd34e2e085b67
|
|
| BLAKE2b-256 |
8cdc3ded5a172384930372ee49fb363fee4d50211cacef63c108d116442d91ca
|