{"id":28394764,"url":"https://github.com/chanware/rsync-menu","last_synced_at":"2026-05-04T12:31:27.341Z","repository":{"id":295691498,"uuid":"990928227","full_name":"chanware/rsync-menu","owner":"chanware","description":"User-friendly rsync wrapper for macOS - Clean progress display, menu-driven folder selection, and safe sync operations for backing up to external drives","archived":false,"fork":false,"pushed_at":"2025-05-29T10:35:03.000Z","size":10,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-27T00:39:54.874Z","etag":null,"topics":["backup","cli-tool","external-drive","macos","menu-driven","rsync","shell-script","sync","terminal"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/chanware.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-26T21:34:07.000Z","updated_at":"2025-05-29T10:35:06.000Z","dependencies_parsed_at":"2025-05-26T22:40:00.735Z","dependency_job_id":null,"html_url":"https://github.com/chanware/rsync-menu","commit_stats":null,"previous_names":["chanware/rsync-menu"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/chanware/rsync-menu","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chanware%2Frsync-menu","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chanware%2Frsync-menu/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chanware%2Frsync-menu/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chanware%2Frsync-menu/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/chanware","download_url":"https://codeload.github.com/chanware/rsync-menu/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chanware%2Frsync-menu/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32607318,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-04T10:08:07.713Z","status":"ssl_error","status_checked_at":"2026-05-04T10:08:02.005Z","response_time":58,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["backup","cli-tool","external-drive","macos","menu-driven","rsync","shell-script","sync","terminal"],"created_at":"2025-05-31T19:00:19.154Z","updated_at":"2026-05-04T12:31:27.325Z","avatar_url":"https://github.com/chanware.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# rsync Menu - User-Friendly Sync Utility for macOS\n\nA simple shell script that transforms rsync's overwhelming output into a clean, menu-driven interface for backing up specific folders to external drives.\n\n## Features\n\n- **Clean Progress Display**: No more walls of scrolling filenames - see actual transfer progress\n- **Menu-Driven Interface**: Select folders with numbered options instead of typing commands\n- **Flexible Sync Options**: Choose between true mirror sync or copy-only mode\n- **Safe Interruption**: Press Ctrl+C anytime to safely stop operations without corruption\n- **Custom Folder Support**: Add your own directories or sync any folder on-demand\n- **Batch Operations**: Sync all configured folders with one command\n\n## Why Use This?\n\nrsync is powerful but intimidating. When syncing large folders, you get flooded with hundreds of filenames, making it hard to track progress or safely interrupt operations. This script provides:\n\n- Visual progress instead of file spam: `1,205,123  45%  123.45kB/s    0:01:23`\n- Easy folder selection through numbered menus\n- Clear sync vs copy-only options\n- Safe interrupt handling with user-friendly messages\n\n## Installation\n\n### Step 1: Download the Script\n\n```bash\n# Create scripts directory\nmkdir -p ~/Scripts\n\n# Download the script\ncurl -o ~/Scripts/sync_menu.sh https://raw.githubusercontent.com/chanware/rsync-menu/main/sync-menu.sh\n\n# Make it executable\nchmod +x ~/Scripts/sync_menu.sh\n```\n\n### Step 2: Create an Alias\n\n**For zsh (macOS default):**\n```bash\necho \"alias syncmenu='~/Scripts/sync_menu.sh'\" \u003e\u003e ~/.zshrc\nsource ~/.zshrc\n```\n\n**For bash:**\n```bash\necho \"alias syncmenu='~/Scripts/sync_menu.sh'\" \u003e\u003e ~/.bash_profile\nsource ~/.bash_profile\n```\n\n### Step 3: Customize the Script\n\nEdit `~/Scripts/sync_menu.sh` and modify these settings:\n\n1. **Set your external drive name:**\n   ```bash\n   EXTERNAL_DRIVE_NAME=\"YOUR_DRIVE_NAME\"  # e.g., \"backup-ssd\" or \"My Backup Drive\"\n   ```\n\n2. **Add your custom folders** (options 5 \u0026 6):\n   ```bash\n   5) do_sync \"$HOME/Projects/\" \"$DRIVE_PATH/Projects/\" \"Projects\" ;;\n   6) do_sync \"$HOME/Code/\" \"$DRIVE_PATH/Code/\" \"Code\" ;;\n   ```\n\n3. **Update the \"sync all\" section** to include your custom folders.\n\n## Usage\n\n### Basic Operation\n\nRun the script:\n```bash\nsyncmenu\n```\n\nYou'll see a menu like this:\n```\n=== File Sync Menu ===\n(Press Ctrl+C anytime to safely stop sync operations)\n1) Desktop\n2) Documents\n3) Downloads\n4) Pictures\n5) Custom Folder 1\n6) Custom Folder 2\n7) Custom folder (enter path)\n8) Sync all configured folders\n9) Exit\n```\n\n### Sync Types\n\nWhen you select a folder, choose the sync operation:\n\n- **True Sync (Mirror)**: Creates exact copy - adds, updates, AND deletes files not in source\n- **Copy/Update Only**: Adds and updates files, but never deletes anything\n\n### Progress Display\n\nInstead of overwhelming file lists, you see clean progress:\n```\n1,205,123  45%  123.45kB/s    0:01:23\n```\n\n### Safe Interruption\n\nPress **Ctrl+C** anytime during sync operations. rsync will:\n- Complete writing the current file\n- Exit cleanly without corruption\n- Display a confirmation message\n\n## Configuration Examples\n\n### For Photography Workflow\n```bash\n4) do_sync \"$HOME/Photos/RAW/\" \"$DRIVE_PATH/Photos-RAW/\" \"RAW Photos\" ;;\n5) do_sync \"$HOME/Photos/Processed/\" \"$DRIVE_PATH/Photos-Processed/\" \"Processed Photos\" ;;\n```\n\n### For Development Work\n```bash\n4) do_sync \"$HOME/Development/\" \"$DRIVE_PATH/Development/\" \"Development Projects\" ;;\n5) do_sync \"$HOME/.config/\" \"$DRIVE_PATH/Config-Backup/\" \"Configuration Files\" ;;\n```\n\n### For Media Collections\n```bash\n4) do_sync \"$HOME/Movies/\" \"$DRIVE_PATH/Movies/\" \"Movie Collection\" ;;\n5) do_sync \"$HOME/Music/\" \"$DRIVE_PATH/Music/\" \"Music Library\" ;;\n```\n\n## Troubleshooting\n\n### Drive Not Found Error\n- Ensure external drive is connected and mounted in `/Volumes/`\n- Check that `EXTERNAL_DRIVE_NAME` matches exactly (case-sensitive)\n- Try: `ls /Volumes/` to see available drives\n\n### Permission Errors\n- Ensure script is executable: `chmod +x ~/Scripts/sync_menu.sh`\n- Check source folder permissions\n- Run with `sudo` if syncing system directories (not recommended for personal files)\n\n### Alias Not Working\n- Reload shell configuration: `source ~/.zshrc`\n- Restart terminal application\n- Verify alias exists: `alias | grep syncmenu`\n- Check script path: `ls -la ~/Scripts/sync_menu.sh`\n\n### Sync Operations Fail\n- Verify source folders exist\n- Ensure external drive has sufficient space\n- Check for special characters in folder names\n\n## Requirements\n\n- macOS (rsync comes pre-installed)\n- External drive for backups\n- Terminal access (Terminal.app or iTerm2)\n\n## Contributing\n\n1. Fork the repository\n2. Create a feature branch\n3. Make your changes\n4. Test thoroughly\n5. Submit a pull request\n\n## License\n\nMIT License - feel free to modify and distribute.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchanware%2Frsync-menu","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchanware%2Frsync-menu","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchanware%2Frsync-menu/lists"}