{"id":17382912,"url":"https://github.com/hyperb1iss/aeonsync","last_synced_at":"2025-08-03T01:33:00.252Z","repository":{"id":256308116,"uuid":"852574050","full_name":"hyperb1iss/aeonsync","owner":"hyperb1iss","description":"A simple but powerful backup manager","archived":false,"fork":false,"pushed_at":"2024-10-16T05:32:23.000Z","size":177,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-12-02T08:00:06.502Z","etag":null,"topics":["backup","python","restore","rsync","shell"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hyperb1iss.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":"hyperb1iss","ko_fi":"hyperb1iss"}},"created_at":"2024-09-05T03:31:42.000Z","updated_at":"2024-10-16T05:32:26.000Z","dependencies_parsed_at":"2024-09-10T04:33:19.118Z","dependency_job_id":"4ed593f4-d73c-479f-bd43-a1221956f8af","html_url":"https://github.com/hyperb1iss/aeonsync","commit_stats":null,"previous_names":["hyperb1iss/aeonsync"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hyperb1iss%2Faeonsync","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hyperb1iss%2Faeonsync/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hyperb1iss%2Faeonsync/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hyperb1iss%2Faeonsync/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hyperb1iss","download_url":"https://codeload.github.com/hyperb1iss/aeonsync/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228516331,"owners_count":17932442,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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","python","restore","rsync","shell"],"created_at":"2024-10-16T07:39:49.724Z","updated_at":"2025-08-03T01:33:00.241Z","avatar_url":"https://github.com/hyperb1iss.png","language":"Python","funding_links":["https://github.com/sponsors/hyperb1iss","https://ko-fi.com/hyperb1iss"],"categories":[],"sub_categories":[],"readme":"# 🌀 AeonSync\n\n\u003cdiv align=\"center\"\u003e\n\n[![CI/CD](https://github.com/hyperb1iss/signalrgb-python/actions/workflows/ci-cd.yml/badge.svg)](https://github.com/hyperb1iss/aeonsync/actions)\n[![License](https://img.shields.io/badge/license-GPL--3.0-green.svg)](https://opensource.org/licenses/GPL-3.0)\n[![Python Version](https://img.shields.io/badge/python-3.12-blue.svg)](https://www.python.org/downloads/release/python-3120/)\n\n_A powerful and flexible remote backup tool for developers and system administrators_\n\n[Key Features](#-key-features) • [Getting Started](#-getting-started) • [Usage](#-usage) • [Advanced Topics](#-advanced-topics) • [Contributing](#-contributing)\n\n\u003c/div\u003e\n\n## ✨ Key Features\n\nAeonSync redefines remote backups with its powerful feature set:\n\n- 🔄 **Flexible Backup Modes**: Daily snapshots or multiple backups per day\n- 🔗 **Efficient Incremental Backups**: Leverages rsync's `--link-dest` for optimal storage use\n- 🔐 **Secure Remote Syncing**: Rock-solid SSH encryption for data transfer\n- ⏱️ **Smart Retention Policies**: Automatic management of your backup history\n- 🕰️ **Version Control**: Restore specific file versions with ease\n- 🖥️ **Intuitive CLI**: Seamless command-line experience powered by Typer\n- 📊 **Rich Metadata**: Comprehensive insights into each backup operation\n\n## 🚀 Getting Started\n\n### Requirements\n\n- Python 3.12+\n- SSH access to remote server/NAS\n- rsync on local and remote systems\n- [uv](https://github.com/astral-sh/uv) (recommended) or pip\n\n### Installation\n\nWith UV (recommended):\n```bash\nuv pip install aeonsync\n```\n\nWith pip:\n```bash\npip install aeonsync\n```\n\n## 📘 Usage\n\nBasic command structure:\n\n```bash\n# Perform a backup (multiple per day by default)\naeon sync --remote user@host:/path/to/backups\n\n# Restore a file\naeon restore [OPTIONS] FILE [DATE]\n\n# List available backups\naeon list-backups\n```\n\n### Sync Command\n\nThe sync command is used to create backups:\n\n```bash\naeon sync [OPTIONS]\n```\n\nOptions:\n\n- `--remote TEXT`: Remote destination in the format [user@]host:path\n- `--source PATH`: Source directories to backup (can be specified multiple times)\n- `--retention INTEGER`: Number of days to retain backups\n- `--dry-run`: Perform a dry run without making changes\n- `--verbose`: Enable verbose output\n- `--daily`: Create only one backup per day (overrides default behavior)\n\n### Restore Command\n\nThe restore command provides functionality for file recovery:\n\n```bash\naeon restore [OPTIONS] [FILE] [DATE]\n```\n\nOptions:\n\n- `--output PATH`: Output directory for restored file or directory\n- `--interactive`: Use fully interactive mode for restore\n- `--diff`: Show diff between local and backup versions\n- `--preview`: Show a preview of the file before restoring\n\n### List Backups Command\n\nTo view available backups:\n\n```bash\naeon list-backups [OPTIONS]\n```\n\nThis command displays a detailed list of all backups, including dates, file counts, and total sizes.\n\n## 🔧 Advanced Topics\n\n### ⚙️ Configuration\n\nAeonSync can be configured using command-line options or by modifying the configuration file:\n\n```python\nhostname = \"myworkstation\"\nremote_address = \"user@nas.local\"\nremote_path = \"/volume1/backups\"\nremote_port = 22\nretention_period = 30\nsource_dirs = [\"/home/user/projects\", \"/var/www\", \"/etc\"]\nexclusions = [\".cache\", \"*/node_modules\", \"*.tmp\", \".venv\"]\nssh_key = \"/home/user/.ssh/id_rsa\"\nverbose = False\nlog_file = \"/home/user/.local/share/aeonsync/aeonsync.log\"\ndefault_daily_backup = False  # Set to True to allow only one backup per day\n```\n\n### 📁 Remote Structure\n\nAeonSync organizes your backups as follows:\n\n```\n/volume1/backups/\n└── myworkstation/\n    ├── latest -\u003e 2024-03-15\n    ├── 2024-03-15/\n    ├── 2024-03-14/\n    ├── 2024-03-13.1/\n    ├── 2024-03-13/\n    └── ...\n```\n\n- Each backup is stored in a date-stamped directory\n- Multiple backups per day append a sequence number (e.g., `2024-03-13.1`)\n- The `latest` symlink always points to the most recent backup\n\n### 🌟 Use Cases\n\nAeonSync can be used in various scenarios:\n\n#### Home Office Backup\n\nProtect your projects and documents with daily backups to your Synology NAS:\n\n```bash\naeon sync --remote user@synology:/volume1/backups --source /home/user/projects --source /home/user/documents\n```\n\n#### Web Server Backup\n\nSafeguard your web applications and databases:\n\n```bash\naeon sync --remote backupuser@remote-server:/backups --source /var/www --source /var/lib/mysql\n```\n\n#### Developer Workstation\n\nKeep your code safe with multiple backups per day:\n\n```bash\naeon sync --remote user@dev-server:/backups --source /home/dev/workspace\n```\n\n#### Small Business Server\n\nComprehensive backup solution for critical business data:\n\n```bash\naeon config --hostname business-server --remote-address nas.local --remote-path /volume1/business-backups\naeon sync --source /home/shared --source /var/financial-data --retention 90\n```\n\n### 🛠️ Development\n\nTo set up the development environment:\n\n1. Clone the repository:\n   ```bash\n   git clone https://github.com/hyperb1iss/aeonsync.git\n   cd aeonsync\n   ```\n\n2. Install UV if you haven't already: \n   ```bash\n   curl -LsS https://astral.sh/uv/install.sh | bash\n   ```\n\n3. Create development environment and install dependencies:\n   ```bash\n   uv venv\n   uv sync\n   ```\n\n4. Activate the virtual environment:\n   ```bash\n   source .venv/bin/activate  # On Linux/macOS\n   .venv\\Scripts\\activate     # On Windows\n   ```\n\nTo run tests:\n\n```bash\nuv run pytest\n```\n\nTo run linting checks:\n\n```bash\nuv run ruff check .\nuv run mypy .\n```\n\n## 👥 Contributing\n\nContributions to AeonSync are welcome! Here's how you can contribute:\n\n1. Fork the repository\n2. Create a new branch: `git checkout -b feature-branch-name`\n3. Make your changes and commit them: `git commit -m 'Add some feature'`\n4. Push to the branch: `git push origin feature-branch-name`\n5. Submit a pull request\n\nPlease ensure your code adheres to the project's style guide (we use Ruff for formatting) and passes all tests.\n\n## 📄 License\n\nThis project is licensed under the GNU General Public License v3.0. See the [LICENSE](LICENSE) file for details.\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n📚 [Documentation](#) • 🐛 [Report Bug](https://github.com/hyperb1iss/aeonsync/issues) • 💡 [Request Feature](https://github.com/hyperb1iss/aeonsync/issues)\n\nCreated by [Stefanie Jane 🌠](https://github.com/hyperb1iss)\n\nIf you find this project useful, [buy me a Monster Ultra Violet!](https://ko-fi.com/hyperb1iss) ⚡️\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhyperb1iss%2Faeonsync","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhyperb1iss%2Faeonsync","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhyperb1iss%2Faeonsync/lists"}