Intelligent Backup System for Developers
Automatically backup your important files while skipping node_modules, virtual environments, and other build artifacts.
Features β’ Quick Start β’ Installation β’ Usage β’ Configuration β’ Contributing
Ever tried to backup your Documents folder only to wait hours because of massive node_modules folders or Python virtual environments?
SmartBackup solves this. It automatically detects and skips development artifacts, making your backups:
- β‘ 10x faster - Skip gigabytes of dependencies
- πΎ 10x smaller - Only backup what matters
- π§ Smart - Incremental backups copy only changed files
- π Zero config - Works out of the box
| Feature | Description |
|---|---|
| π Cross-Platform | Works on Windows, macOS, and Linux |
| π Smart Filtering | Auto-skips node_modules, venv, .git, __pycache__, etc. |
| π Incremental Backup | Only copies new or modified files |
| π Manifest Tracking | JSON manifest for 10x faster incremental backups |
| π Restore Support | Full restore functionality with pattern filtering |
| π Auto-Detection | Automatically finds external drives |
| π Detailed Logging | Progress bar + log file on backup drive |
| π― Zero Dependencies | Pure Python, no pip installs required |
| βοΈ Configurable | Add custom exclusions as needed |
Just download and run!
- Download the latest release or clone this repository
- Connect your external drive
- Run the backup:
python main.pyThat's it! Your Documents folder will be backed up to the external drive.
# Clone the repository
git clone https://github.com/CodingWithMK/smartbackup_file-backup-automation.git
cd smartbackup_file-backup-automation
# Run directly
python main.py# Clone and install
git clone https://github.com/CodingWithMK/smartbackup_file-backup-automation.git
cd smartbackup_file-backup-automation
pip install .
# Now you can run from anywhere
smartbackupgit clone https://github.com/CodingWithMK/smartbackup_file-backup-automation.git
cd smartbackup_file-backup-automation
uv venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
uv pip install -e ".[dev]"
# Run
python main.py
# or
smartbackup# Backup Documents folder to auto-detected external drive
python main.py
# Or if installed
smartbackup# Backup a specific folder
python main.py --source ~/Projects
# Backup to a specific drive
python main.py --target /media/USB_DRIVE
# Find drive by name
python main.py --label "My Backup Drive"
# See what would be backed up (without copying)
python main.py --dry-run
# List available drives
python main.py --list-drives
# Quiet mode (less output)
python main.py --quiet
# Add extra folders to skip
python main.py --exclude "downloads" "*.iso"usage: smartbackup [-h] [-s SOURCE] [-t TARGET] [-l LABEL] [--dry-run]
[-q] [--exclude PATTERN [PATTERN ...]] [--list-drives]
[--no-manifest] [--show-manifest] [--verify] [-v]
{restore} ...
Options:
-h, --help Show this help message
-s, --source PATH Source directory (default: Documents)
-t, --target PATH Target drive/directory
-l, --label NAME Find drive by label name
--dry-run Simulate without copying
-q, --quiet Minimal output
--exclude PATTERN Additional exclusion patterns
--list-drives Show available drives
--no-manifest Disable manifest tracking
--show-manifest Display manifest contents
--verify Verify backup against manifest
-v, --version Show version
Commands:
restore Restore files from backup
# Restore all files to original location
smartbackup restore --source /path/to/backup
# Restore to a specific directory
smartbackup restore --source /path/to/backup --target ~/Restored
# Restore only specific files (pattern matching)
smartbackup restore --source /path/to/backup --pattern "*.py" "*.md"
# Preview what would be restored (dry-run)
smartbackup restore --source /path/to/backup --dry-run
# List files in backup
smartbackup restore --source /path/to/backup --list
# Overwrite existing files
smartbackup restore --source /path/to/backup --overwrite# Show manifest information
smartbackup --target /path/to/backup --show-manifest
# Verify backup integrity against manifest
smartbackup --target /path/to/backup --verify
# Disable manifest tracking (use traditional change detection)
smartbackup --no-manifestββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Intelligent Backup System v0.2.1 β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βΉ [2024-01-15 09:30:22] Source directory: /Users/dev/Documents
βΉ [2024-01-15 09:30:22] Operating system: Darwin 23.1.0
βΆ Searching for external storage medium...
β [2024-01-15 09:30:22] External medium found: BACKUP_USB (/Volumes/BACKUP_USB) - 234.5 GB free
βΆ Scanning source directory: /Users/dev/Documents
βΉ [2024-01-15 09:30:45] Scan completed: 1,523 files found, 8,492 excluded
βΆ Analyzing changes...
βΉ [2024-01-15 09:30:47] Analysis completed: 12 new, 34 modified, 0 to delete
βΆ Starting backup operation...
β [COPIED] Projects/app/main.py (2.3 KB)
π [UPDATED] Documents/report.docx (156.2 KB)
[ββββββββββββββββββββββββββββββ] 100.0% (46/46) | 12.4MB/12.4MB
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β BACKUP SUMMARY β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ£
β β Copied Files: 12 β
β β Updated Files: 34 β
β β Skipped Files: 1,477 β
β β Errors: 0 β
β β
β Duration: 00:00:23 β
β Speed: 0.54 MB/s β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Backup completed successfully!
SmartBackup automatically skips these folders and files:
Click to see full exclusion list
node_modules.npm,.yarndist,build.next,.nuxt
venv,.venv,env__pycache__.pytest_cache,.mypy_cache*.pyc,*.pyo
.git.svn.hg
.idea(JetBrains).vscode*.swp,*.swo(Vim)
target(Java/Rust)bin,obj(.NET).gradle
.DS_Store(macOS)Thumbs.db(Windows)desktop.ini
*.tmp,*.temp*.log*.bakcache,.cache
Command line:
python main.py --exclude "my_folder" "*.iso" "downloads"Permanent exclusions are saved in:
- Windows:
%APPDATA%\SmartBackup\config.json - macOS/Linux:
~/.config/smartbackup/config.json
Files are backed up to:
YOUR_EXTERNAL_DRIVE/
βββ Documents-Backup/
βββ _backup_logs/
β βββ backup_20240115_093022.log
βββ Your files and folders...
βββ ...
If no external drive is found, SmartBackup offers options:
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β EXTERNAL STORAGE MEDIUM NOT FOUND β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ£
β Please make sure that: β
β β’ The external medium is connected β
β β’ The medium is recognized by the system β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Options:
[1] Create local temporary backup
[2] Wait and try again
[3] Cancel
# Clone
git clone https://github.com/CodingWithMK/smartbackup_file-backup-automation.git
cd smartbackup_file-backup-automation
# Create virtual environment
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# Install with dev dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Run linter
ruff check .smartbackup_file-backup-automation/
βββ src/
β βββ smartbackup/
β βββ __init__.py # Package exports
β βββ __main__.py # python -m smartbackup
β βββ backup.py # SmartBackup main class
β βββ cli.py # CLI argument parsing
β βββ config.py # Configuration management
β βββ handlers.py # Fallback handlers
β βββ models.py # Data classes
β βββ core/
β β βββ engine.py # Backup engine
β β βββ scanner.py # File scanner
β β βββ detector.py # Change detection
β β βββ restore.py # Restore engine
β βββ manifest/
β β βββ base.py # Manifest classes
β β βββ json_manifest.py # JSON implementation
β βββ platform/
β β βββ resolver.py # Path resolution
β β βββ devices.py # Device detection
β β βββ scheduler.py # OS scheduler helpers
β βββ ui/
β βββ colors.py # Terminal colors
β βββ logger.py # Logging
βββ tests/ # 175 tests
βββ main.py # Quick entry point
βββ pyproject.toml
βββ README.md
# These all work:
python main.py
python -m smartbackup
smartbackup # if installedContributions are welcome! Here's how:
- Fork the repository
- Create a branch:
git checkout -b feature/amazing-feature - Make your changes
- Run tests:
pytest - Commit:
git commit -m 'Add amazing feature' - Push:
git push origin feature/amazing-feature - Open a Pull Request
See CONTRIBUTING.md for details.
This project is licensed under the MIT License - see the LICENSE file for details.
- Built with β€οΈ for developers who are tired of backing up
node_modules - Inspired by the frustration of slow backups
If this tool saved you time, consider giving it a β