Skip to main content

Bulk file renaming with a terminal UI

Project description

renux

Bulk file renaming with a terminal UI

About

renux is a tool with terminal user interface (TUI) that automates file renaming. It simplifies this task with features like regex, placeholders, and text transformations, making it ideal for situations such as renaming photos, cleaning up download folders, or enforcing consistent naming conventions.

Features

  • Regex: perform advanced renaming with pattern matching, capturing groups, and replacements.
  • Text transformations: apply text transformations like slugify, camelCase to snake_case, and more.
  • Counter placeholders: add incremental counters (e.g., file1.txt, file2.txt) with customizable starting points, increments, and padding.
  • Date placeholders: include file creation/modification dates or the current date in filenames with customizable formats.
  • Backup and undo/redo: save and restore changes to your files.
  • File exclusion: exclude files from renaming.
  • Keyboard shortcuts: use hotkeys to quickly apply actions and navigate the UI.

Installation

pipx install renux

Usage

renux [directory] [pattern] [replacement]
  • [directory]: Directory where files are located (default is the current directory).
  • pattern: Search pattern, which can be a regular expression (default is '').
  • replacement: Replacement string for the pattern (default is '').

Options

  • -c, --count: Max replacements per file (default is 0, meaning unlimited).
  • -r, --regex: Treats the pattern as a regular expression (default is False).
  • -s, --case-sensitive: Makes the search case-sensitive (default is False).
  • --apply-to: Specifies where the renaming should be applied. Options are:
    • name: Rename the file's base name (default).
    • ext: Rename the file's extension.
    • both: Rename both the name and extension.

Markup

  • Text transformations: {string|operation}

    • slugify: Convert into a URL/filename-friendly format (e.g., "hello world" -> "hello-world")
    • lower: Convert to lowercase
    • upper: Convert to uppercase
    • caps: Capitalize the first letter
    • title: Capitalize each word
    • camel: Convert to camel case (e.g., "hello world" -> "helloWorld")
    • pascal: Convert to pascal case (e.g., "hello world" -> "HelloWorld")
    • snake: Convert to snake case (e.g., "hello world" -> "hello_world")
    • kebab: Convert to kebab case (e.g., "hello world" -> "hello-world")
    • swapcase: Swap the case (e.g., "Hello World" -> "hELLO wORLD")
    • reverse: Reverse the string (e.g., "Hello World" -> "dlroW olleH")
    • strip: Remove leading and trailing whitespace
    • len: Get the length of the string
  • Counter: {counter(start=1,step=1,padding=1)}, .e.g. {counter(1,2,3)} will generate a sequence like 001, 003, 005, ...

  • Dates: {now|created_at|modified_at(<format>)}, e.g. {now(%Y)} will replace it with the current year

Run python project.py -h for more details.

Examples

  • Rename files starting with "IMG" to "Image":

    python project.py my_photos/ IMG_ Image_
    
  • Rename all .txt files to .bak:

    python project.py my_directory/ .txt .bak --apply-to ext
    
  • Use regex to retain information from the old name:

    python project.py my_documents "document (\d).pdf" "doc (\1).pdf" -r
    
  • Append a counter to filenames:

    python project.py my_files/ file "file_{counter}"
    
  • Append creation year to filenames:

    python project.py my_files/ file "file_{created_at(%Y)}"
    
  • Apply transformations like slugify:

    python project.py my_files "(.*)" "{filename|slugify}" -r
    

Development

Setup

  1. Clone the repository:
git clone https://github.com/andrianllmm/renux.git
cd renux
  1. Create and activate virtual environment:
python -m venv venv

# Linux/macOS:
source venv/bin/activate
# Windows:
.\venv\Scripts\activate
  1. Install dependencies:
pip install -r requirements.txt

Testing

Run tests with:

pytest test_project.py

The test includes a variety of edge cases, feature combinations, and error scenarios. It uses mocking, which ensures that no files are actually modified during testing.

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

renux-0.1.0.tar.gz (12.7 kB view details)

Uploaded Source

Built Distribution

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

renux-0.1.0-py3-none-any.whl (15.7 kB view details)

Uploaded Python 3

File details

Details for the file renux-0.1.0.tar.gz.

File metadata

  • Download URL: renux-0.1.0.tar.gz
  • Upload date:
  • Size: 12.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.3 CPython/3.10.12 Linux/5.15.167.4-microsoft-standard-WSL2

File hashes

Hashes for renux-0.1.0.tar.gz
Algorithm Hash digest
SHA256 80dfa4f33cb08a5dc18dda2fda133ae272aa606092eb127aee0515cbc738a041
MD5 e742578ea7a7aa8ecf3a7b6769b21f47
BLAKE2b-256 0fb73f7606d6544d5f738bb6e1213104c10de41c435fd69de217a2938e4c84a8

See more details on using hashes here.

File details

Details for the file renux-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: renux-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 15.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.3 CPython/3.10.12 Linux/5.15.167.4-microsoft-standard-WSL2

File hashes

Hashes for renux-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ec9248888de605332f5c98c06ec90c44c68a530686d42b37d718ade431686877
MD5 ed6de4b45034cfc775596e493ecddf68
BLAKE2b-256 0412ab034b8c746f267de00d7d7784b300376c2a57d7e900b344ea179a5b44d4

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