🚀 BCMR (Better Copy Move Remove)
Making file operations simpler and more modern! BCMR is a command-line tool written in Rust that lets you elegantly copy, move, and remove files.

📥 Installation
Using Install Script (Recommended)
|
Using Cargo
Building from Source
The compiled binary will be available at target/release/bcmr.
✨ Features
- 🎯 Real-time Progress Bar - No more guessing how long it'll take
- ⏳ ETA Display - See estimated time remaining
- 🔄 Recursive Directory Operations - Handle entire folders with one command
- 🎨 Attribute Preservation - Keep timestamps, permissions, and more
- ⚡ Asynchronous I/O - Faster file operations
- 🛡️ Safe Confirmation System - Prevent accidental overwrites or deletions
- 🎭 Regex File Exclusion - Flexibly ignore unwanted files using Regular Expressions
- 🔍 Dry Run Mode - Preview operations without making changes
- 📊 Detailed Operation Info - Know exactly what's happening
- 🔌 Shell Integration - Customize command names with flexible prefixes
- 🎮 Two Progress Display Modes - Plain text (default) or fancy TUI display
📖 Detailed Usage Guide
Shell Integration
BCMR provides flexible shell integration similar to zoxide. You can customize command names with prefixes or replace native commands.
Basic syntax:
Available options:
--cmd <prefix>: Set command prefix (e.g., 'b' creates bcp, bmv, brm)--no-cmd: Don't create command aliases--path <path>: Add directory to PATH
Examples:
# Add to your ~/.bashrc or ~/.zshrc:
# Use custom prefix (creates testcp, testmv, testrm)
# Replace native commands (creates cp, mv, rm)
# Use 'b' prefix (creates bcp, bmv, brm)
Supported shells:
- Bash
- Zsh
- Fish
Copy Command
Basic syntax:
Available options:
-r, --recursive: Copy directories recursively--preserve: Preserve file attributes (timestamps, permissions)-f, --force: Force overwrite existing files-y, --yes: Skip confirmation when using force-n, --dry-run: Preview operation without making changes--exclude=<pattern>: Exclude files matching Regex pattern (comma-separated)- Progress Bar:
- Default: Modern inline progress bar with gradients and ETA.
- TUI Mode: Full box interface with
--tuior-t.
- Performance: Optimized buffer sizes and parallel I/O for maximum throughput.
Examples:
# Copy a single file
# Copy multiple files (Shell Globbing works!)
# Recursively copy a directory
# Dry run (preview what would be copied)
# Copy with attribute preservation
# Force overwrite without prompting
# Copy with Regex exclusions (exclude .git folder and .tmp files)
Move Command
Basic syntax:
Available options:
-r, --recursive: Move directories recursively--preserve: Preserve file attributes-f, --force: Force overwrite existing files-y, --yes: Skip overwrite confirmation-n, --dry-run: Preview operation without making changes--exclude=<pattern>: Exclude matching files (Regex)--fancy-progress: Use fancy TUI progress display (default is plain text)
Examples:
# Move a single file
# Move multiple files
# Recursively move a directory
# Dry run
# Move with exclusions (Regex)
Remove Command
Basic syntax:
Available options:
-r, --recursive: Recursively remove directories-f, --force: Force removal without confirmation-i, --interactive: Prompt before each removal-v, --verbose: Show detailed removal process-d: Remove empty directories-n, --dry-run: Preview operation without making changes--exclude=<pattern>: Exclude matching files (Regex)--fancy-progress: Use fancy TUI progress display (default is plain text)
Examples:
# Remove a single file
# Remove multiple files (Globbing)
# Recursively remove a directory
# Dry run (safe check)
# Interactive removal of multiple files
# Remove with exclusions (Regex)
Progress Display Modes
BCMR offers two progress display modes:
- Plain Text Mode (Default): Simple text-based progress bars that work in any terminal
- Fancy TUI Mode: Rich terminal UI with enhanced visual elements and gradients
Fancy Mode Configuration
You can fully customize the fancy progress bar by creating a configuration file at ~/.config/bcmr/config.toml:
[]
# Set the style to "fancy" to potentially make it default in future versions (currently requires flag)
= "fancy"
[]
# Define a gradient for the progress bar (Hex colors) - Default is a Morandi purple gradient
= ["#CABBE9", "#7E6EAC"]
= "█"
= "░"
= "reset" # "reset" adapts to your terminal background
= "#9E8BCA"
= "#9E8BCA"
[]
# Options: rounded, double, heavy, single
= "rounded"
Use --fancy-progress flag to enable the fancy TUI mode for a more visually appealing experience.
📝 License
GPL-3.0 © Zane Leong