| Crates.io | cpx |
| lib.rs | cpx |
| version | 0.1.2 |
| created_at | 2026-01-24 12:46:12.534499+00 |
| updated_at | 2026-01-24 14:00:57.494953+00 |
| description | A modern, fast file copying tool |
| homepage | |
| repository | https://github.com/11happy/cpx |
| max_upload_size | |
| id | 2066619 |
| size | 291,269 |
A modern, fast file copy tool for Linux with progress bars, resume capability, and more.
cpx is a modern replacement for the traditional cp command, built with Rust for maximum performance and safety on Linux systems.
cpx -r projects/ /backup/
Copying 51% ████████████████████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ETA:00:06
🚀 Fast parallel copying (upto 5x faster than cp benchmarks)
📊 Beautiful progress bars (customizable)
⏸️ Resume interrupted transfers
🎯 Exclude patterns (gitignore-style)
⚙️ Flexible configuration
🛑 Graceful Ctrl+C handling with resume hints
Linux (kernel 4.5+ recommended for fast copy)
Rust 1.70 or later
curl -fsSL https://raw.githubusercontent.com/11happy/cpx/main/install.sh | bash
Or with wget:
wget -qO- https://raw.githubusercontent.com/11happy/cpx/main/install.sh | bash
cargo install cpx
git clone https://github.com/11happy/cpx.git
cd cpx
cargo install --path .
cpx --version
Download from Releases
# Copy a file
cpx source.txt dest.txt
# Copy directory recursively
cpx -r source_dir/ dest_dir/
# Copy with progress bar
cpx -r large_dir/ /backup/
# Backup project (exclude build artifacts)
cpx -r -e "node_modules" -e ".git" -e "target" my-project/ /backup/
# Resume interrupted transfer
cpx -r --resume large_dataset/ /backup/
# Deploy with safety (interactive + backups)
cpx -ri -b=numbered dist/ /var/www/production/
# Instant snapshot on Btrfs/XFS
cpx -r --reflink=always /data/ /snapshots/backup-$(date +%Y-%m-%d)/
# Copy with full attribute preservation
cpx -r -p=all photos/ /backup/photos/
See examples.md for detailed workflows and real-world scenarios.
cpx [OPTIONS] <SOURCE>... <DESTINATION>
Arguments:
<SOURCE>... Source file(s) or directory(ies)
<DESTINATION> Destination file or directory
Input/Output Options:
-t, --target-directory <DIRECTORY>
Copy all SOURCE arguments into DIRECTORY
-e, --exclude <PATTERN> Exclude files matching pattern (supports globs, comma-separated)
Copy Behavior:
-r, --recursive Copy directories recursively
-j <N> Number of parallel operations [default: 4]
--resume Resume interrupted transfers (checksum verified)
-f, --force Remove and retry if destination cannot be opened
-i, --interactive Prompt before overwrite
--parents Use full source file name under DIRECTORY
--attributes-only Copy only attributes, not file data
--remove-destination Remove destination file before copying
Link and Symlink Options:
-s, --symbolic-link [MODE]
Create symlinks instead of copying [auto|absolute|relative]
-l, --link Create hard links instead of copying
-P, --no-dereference Never follow symbolic links in SOURCE
-L, --dereference Always follow symbolic links in SOURCE
-H, --dereference-command-line
Follow symbolic links only on command line
Preservation:
-p, --preserve [ATTRS] Preserve attributes [default|all|mode,timestamps,ownership,...]
Available: mode, ownership, timestamps, links, context, xattr
Backup and Reflink:
-b, --backup [MODE] Backup existing files [none|simple|numbered|existing]
--reflink [WHEN] CoW copy if supported [auto|always|never]
Configuration:
--config <PATH> Use custom config file
--no-config Ignore all config files
Other:
-h, --help Print help information
-V, --version Print version information
For complete usage examples, see examples.md
For complete option reference, run cpx --help
Set defaults with configuration files:
# Create config with defaults
cpx config init
# View active configuration
cpx config show
# See config file location
cpx config path
Config locations (in priority order):
./cpxconfig.toml (project-level)~/.config/cpx/cpxconfig.toml (user-level)/etc/cpx/cpxconfig.toml (system-level, Unix only)Example config (~/.config/cpx/cpxconfig.toml):
[exclude]
patterns = ["*.tmp", "*.log", "node_modules", ".git"]
[copy]
parallel = 8
recursive = false
[preserve]
mode = "default"
[progress]
style = "detailed"
[reflink]
mode = "auto"
See configuration.md for all options and use cases.
cpx is built for speed. Quick comparison:
| Task | cp | cpx | speedup |
|---|---|---|---|
| VsCode (~15k files) | 1084ms | 263ms | 4.12x |
| rust (~65k files) | 4.553s | 1.091s | 4.17x |
See benchmarks.md for detailed methodology and more comparisons.
| Platform | Status | Notes |
|---|---|---|
| Linux | ✅ Supported | Fast copy supported for (kernel 4.5+) |
| macOS | 🔄 Planned | Basic support coming soon |
| Windows | 🔄 Planned | Future release |
Linux-specific optimizations:
copy_file_range syscall (kernel 4.5+)Contributions welcome! See CONTRIBUTING.md for guidelines.
git clone https://github.com/11happy/cpx.git
cd cpx
# Run tests
cargo test
# Run clippy
cargo clippy
# Try it out
cargo run -- -r test_data/ test_dest/
Current (v0.1)
Upcoming (v0.2)
macOS support
Windows support
MIT LICENSE
Inspired by ripgrep, fd, and the modern Rust CLI ecosystem.
Built with: clap, indicatif, rayon, jwalk, and more.