Skip to main content

Advanced file renaming tool with regex and case transformation support

Project description

renx is a powerful command-line utility for batch renaming files and directories with advanced pattern matching and transformation capabilities.

Python Version PyPI version fury.io Tests Status

☕ Support

If you find this project helpful, consider supporting me:

ko-fi

✨ Features

  • Pattern-based renaming 🧩 - Use regex substitutions to transform filenames
  • Case conversion: lower, upper, title, swapcase, capitalize
  • URL-safe names 🌐 - Clean filenames for web use (--urlsafe)
  • Precise file selection 🎯:
    • Include/exclude files with --includes/--excludes
    • Control traversal depth with --max-depth
  • Safe operations 🛡️:
    • Dry-run mode by default (--act to execute) preview changes before executing
    • Bottom-up or top-down processing

📦 Installation

pip install renx

🚀 Usage

python -m renx [OPTIONS] [PATHS...]

Basic Examples

  1. Dry-run preview (default behavior):

    python -m renx /path/to/files
    
  2. Convert filenames to lowercase:

    python -m renx --lower /path/to/files
    
  3. Actually perform renames (disable dry-run):

    python -m renx --act --lower /path/to/files
    
  4. Make filenames URL-safe:

    python -m renx --urlsafe /path/to/files
    

🔁 Substitution Pattern Format

1. Simple Transformation Syntax

transform_name[:additional_flags]
  • Applies a transformation to the entire input
  • No search-replace pattern matching
  • Example: "upper" or "lower:ext"

2. Search-Replace Syntax

❗search❗replacement❗[flags]
  • Performs pattern-based substitution
  • Example: "/old/new/" or "@pattern@replacement@i"
  • The first character (❗) after -s or --subs acts as the delimiter

Components

Separators

❗ Must be one of these special characters:

!"#$%&'*+,-./:;<=>?@\^_`|~

First character of string defines the separator for the entire pattern.

Transformation Names

Available transformations (can be used in both syntax forms):

Name Description
upper Convert to uppercase
lower Convert to lowercase
title Title case
swapcase Swap case of all letters
expandtabs Replace tabs with spaces
casefold Aggressive lowercase for matching
capitalize Capitalize first letter
asciify Convert to ASCII (custom function)
slugify Convert to URL slug (custom function)
urlsafe Make URL-safe (custom function)

Special Flags

Can be appended after colons (:):

Flag Description
ext Only apply to file extensions
stem Only apply to filename stems

Regex Flags

Standard Python regex flags can be included:

  • i - Case insensitive
  • m - Multiline mode
  • s - Dot matches all
  • etc. (any valid regex flag)

Examples

Simple Transformations

  • "upper" - Convert entire string to uppercase
  • "lower:ext" - Convert file extension to lowercase
  • "slugify:stem" - Convert filename stem to URL slug

Search-Replace Operations

  • "/old/new/" - Basic replacement
  • "@[0-9]+@NUM@i" - Replace all numbers with "NUM" (case insensitive)
  • "#cat#dog#ext" - Replace "cat" with "dog" only in file extensions
  • "!([A-Z])!\1_!stem:lower" - Add underscore after capitals in stems and lowercase all

Usage Notes

  • When using the search-replace syntax, the first character must be from the separator set
  • Multiple flags can be combined with colons (:)
  • The "ext" and "stem" flags are mutually exclusive

Practical Examples

  • Replace spaces with underscores:

    renx -s '/ /_/' /path/to/files
    
  • Remove special characters:

    renx -s '/[^a-zA-Z0-9.]//' /path/to/files
    
  • Add prefix to numbered files:

    renx -s '/(\d+)/image_\1/' *.jpg
    
  • Fix inconsistent extensions (case-insensitive):

    renx -s '/\.jpe?g$/.jpg/i' *
    

Filtering Options

  1. Process only matching files:

    python -m renx --name '*.txt' --lower /path/to/files
    
  2. Exclude directories:

    python -m renx --exclude 'temp/*' /path/to/files
    
  3. Limit recursion depth:

    python -m renx --depth ..2 /path/to/files
    

Multiple substitution

When your downloaded files look like they were named by a cat walking on a keyboard 😉:

python -m renx --act \
    -s '#(?:(YTS(?:.?\w+)|YIFY|GloDLS|RARBG|ExTrEmE|EZTVx.to|MeGusta|Lama))##ix' \
    -s '!(2160p|1080p|720p|x264|x265|HEVC|AAC|AC3)!!i' \
    -s '!(HDRip|BluRay|WEB-DL|DVDrip|BRrip|WEBRip|HDRip|DTS)!!i' \
    -s '!\[(|\w+)\]!\1!' \
    -s '/[\._-]+/./' \
    -s '/\.+/ /stem' \
    -s /.+//ext:lower \
    -s '/.+//stem:title' \
    --include "*.m*" \
    .
# Before: "the.matrix.[1999].1080p.[YTS.AM].BRRip.x264-[GloDLS].ExTrEmE.mKV"
# After: "The Matrix 1999.mkv" 🎬✨

Project details


Download files

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

Source Distribution

renx-0.0.7.tar.gz (55.0 kB view details)

Uploaded Source

Built Distribution

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

renx-0.0.7-py3-none-any.whl (37.0 kB view details)

Uploaded Python 3

File details

Details for the file renx-0.0.7.tar.gz.

File metadata

  • Download URL: renx-0.0.7.tar.gz
  • Upload date:
  • Size: 55.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.18

File hashes

Hashes for renx-0.0.7.tar.gz
Algorithm Hash digest
SHA256 c3989664cbd0c7f755345d4f2551bd6ec00efafe2b92aebf549b922ea266eaf6
MD5 bc165160252451690d92688f25d94881
BLAKE2b-256 caa736294294243c8ff864ec9a3dad27048481e311b15c12bd4e344b3e27c0c5

See more details on using hashes here.

File details

Details for the file renx-0.0.7-py3-none-any.whl.

File metadata

  • Download URL: renx-0.0.7-py3-none-any.whl
  • Upload date:
  • Size: 37.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.18

File hashes

Hashes for renx-0.0.7-py3-none-any.whl
Algorithm Hash digest
SHA256 a63c3787822ff969f926bfd4eda3a1de855e6b17a6ce7b743e43918b4b03e5ae
MD5 56897cea6f4155d3291510de79410d75
BLAKE2b-256 e3e7bd9bec42c6753524efcb41121aa38c1656a3d74dc63d744d0e9281307cf9

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 Pingdom Monitoring Sentry Error logging StatusPage Status page