Bulk Renamer & Organizer

approved

by pablon

This plugin has not been manually reviewed by Obsidian staff. Smart filename normalization with preview, collision detection, and one-click undo.

1 stars76 downloadsUpdated 1mo agoGPL-3.0

Bulk Renamer & Organizer

CI Release License: GNU GPLv3

Tame your Obsidian vault. One modal. Zero broken links.

Smart, safe, and ridiculously powerful filename normalization for Obsidian. Preview every change before it happens, catch collisions before they bite you, and undo with one click — because we all make mistakes at 2 AM.

Install from Community Plugins · Manual Install · Configuration


✨ What Makes This Different

Most rename tools go in blind. This one doesn't.

FeatureWhat It Does
🛡️ Preview everythingSee every single change in a color-coded table before touching a file
💥 Collision detectionCatches when two files would normalize to the same name — and blocks execution
↩️ One-click undoMessed up? Undo the entire batch. Rollback persists across vault reloads
🔍 Regex find & replaceAdvanced batch renaming with capture groups, live preview, and all the same safety nets
📅 Smart date prefixesAutomatically organizes files by date — trailing dates move to front, no-date files get their creation time
🍎 macOS case safetyCase-only renames go through a two-step dance so APFS doesn't eat your files
🔗 Link-safeUses fileManager.renameFile() — every wikilink, markdown link, and canvas reference stays intact
⏱️ Rate limitedBuilt-in throttling prevents Obsidian's indexer from choking on bulk operations

🎬 Before / After

BeforeAfterWhat Happened
Angry Ötter & Friends.md2026-04-06-angry-otter-friends.mdLowercase, accents stripped, date added
Infinite Coffee Meeting_2025-10-27.md2025-10-27-infinite-coffee-meeting.mdTrailing date moved to prefix
TODO_World_Domination.md2026-04-06-todo-world-domination.mdUnderscores → dashes, date added
my.super.secret.plan.md2026-04-06-my-super-secret-plan.mdDots → dashes, date added
2025-08-14-Operation Pengüin.md2025-08-14-operation-penguin.mdLowercase, accents removed

Files with trailing dates use that date as prefix. Files without any date use their creation time.


🚀 Quick Start

  1. Open the command palette (Cmd/Ctrl+P)
  2. Search for Bulk rename: Open preview
  3. Review the table — green means safe to rename
  4. Hit Execute → confirm → watch it go
  5. Need to undo? Cmd/Ctrl+PBulk rename: Undo last rename

That's it. Your vault is now organized.


📦 Installation

Community Plugins (Recommended)

  1. Settings → Community plugins → Browse
  2. Search for "Bulk Renamer & Organizer"
  3. InstallEnable

Manual Installation

  1. Grab main.js, manifest.json, and styles.css from the latest release
  2. Drop them into <Vault>/.obsidian/plugins/bulk-renamer/
  3. Reload Obsidian and enable in Settings → Community plugins

🔧 Configuration

Everything lives in Settings → Community plugins → Bulk Renamer & Organizer.

Normalization Pipeline

Each step is independently toggleable. They always run in this order:

SettingDefaultWhat It Does
LowercaseREADME.mdreadme.md
Strip Accentscafé.mdcafe.md
Spaces to Dashesmy note.mdmy-note.md
Dots to Dashesred.es.mdred-es.md
Strip Special CharsKeeps only a-z, 0-9, -
Collapse Dashesa---b.mda-b.md

Date Prefix

ModeBehavior
Trailing or CTime (default)Trailing date → prefix. No date → creation time
Trailing OnlyOnly adds prefix if a trailing date exists
NoneNever adds a date prefix

Timestamp Format

FormatExampleWhen to Use
YYYY-MM-DD (default)2025-01-15Clean, readable, ISO 8601
YYYYMMDD20250115Compact sorting
YYMMDD250115Short and sweet
YYYYMMDD-HHMM20250115-1430Needs hour precision
YYMMDD-HHMMSS250115-143022Full timestamp

Regex Find & Replace

The Find and replace tab gives you full regex power with live preview:

PatternReplacementEffect
^my-our-my-note.mdour-note.md
(\d{4})-(\d{2})-(\d{2})$1$2$32025-01-15-note.md20250115-note.md
_- (with g flag)All underscores → dashes

Supports capture groups ($1, $2), global (g), and case-insensitive (i) flags. Same safety features apply: collision detection, undo, rate limiting, confirmation dialog.

Exclusions

WhatDefaultWhy
Directories.obsidian/, attachments/Config & binary files
File patternsAGENTS.mdAI context files
Templates dirtemplates/Normalized but no date prefix

All three are fully configurable.

Advanced

SettingDefaultWhat It Does
Rate Limit Delay100msPause between batches
Rate Limit Batch10Files per batch before pausing

Crank these up if your vault is huge. Leave them alone if it isn't.


🆚 How It Compares

Here's how Bulk Renamer & Organizer stacks up against other popular rename plugins in the Obsidian community:

FeatureBulk Renamer & OrganizerBulk RenameVault File RenamerSmart Rename
Preview before rename✅ Table with reasons
Collision detection✅ Blocks execution
Undo / Rollback✅ One-click, persistent
Regex find & replace✅ With live preview✅ Text-based
Smart date handling✅ Trailing + ctime
Configurable pipeline✅ 6 toggles + 5 date formats
macOS case safety✅ Two-step rename
Rate limiting✅ Configurable
Template dir awareness✅ No date prefix
Zero external deps✅ Pure TypeScript❌ Uses xregexp

Each plugin serves a different purpose. Smart Rename excels at single-note renames with link preservation. Vault File Renamer focuses on GitHub-style standardization. Bulk Rename offers regex-based renaming. This plugin combines all of those approaches with safety features on top.


🛡️ Safety Features

  • Dry-run preview — every change shown before execution
  • Collision detection — blocks if files would normalize to the same name
  • Rollback/undo — one-click restore, persists across reloads
  • Rate limiting — prevents Obsidian's indexer from choking
  • macOS case safety — two-step rename via .bulk-rename-tmp
  • Confirmation dialog — explicit approval before any file is touched
  • Error resilience — one failure doesn't stop the whole batch

📋 What Gets Renamed

IncludedExcluded
All .md files in subdirectoriesRoot-level files
Files in templates/ (no date prefix).obsidian/ directory
attachments/ directory
AGENTS.md anywhere
Non-.md files

⚠️ Known Limitations

  • Directory names are not renamed — only filenames
  • Canvas display labels may need a vault reload to update (Obsidian limitation), but underlying links are always correct

🤝 Contributing

We'd love your help! Check out CONTRIBUTING.md for setup instructions, architecture overview, testing guidelines, and how to submit a PR.

Quick start for devs:

npm install
npm run dev          # watch mode
npm run build        # production build
npm test             # 190 tests
npm run lint         # eslint (obsidianmd rules)

📄 License

GNU GPLv3


🙏 Credits

Built from the ground up, inspired by the need for a safer, more predictable bulk rename experience in Obsidian.

For plugin developers

Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.