Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/breuleux/synecure
Simple rsync-based synchronization CLI program
https://github.com/breuleux/synecure
Last synced: 9 days ago
JSON representation
Simple rsync-based synchronization CLI program
- Host: GitHub
- URL: https://github.com/breuleux/synecure
- Owner: breuleux
- Created: 2020-07-28T03:21:53.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2021-08-12T05:03:56.000Z (over 3 years ago)
- Last Synced: 2024-04-24T19:33:24.520Z (7 months ago)
- Language: Python
- Size: 136 KB
- Stars: 7
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Synecure
Synecure provides a command line program called `sy` that allows easy synchronization of files and directories over SSH between different machines. It is mostly a wrapper around [bsync](https://github.com/dooblem/bsync), which is itself based on the standard UNIX tool `rsync`.
This is beta software and comes with **NO GUARANTEES** that it will keep your data safe. It should not be used as backup solution.
## Install
```bash
pip install synecure
```## Usage
```bash
# Sync local ~/directory with remote $HOME/directory on [email protected]
sy ~/directory -r [email protected]# Sync current directory with the same path on [email protected], port 2222
sy -r [email protected] -p 2222# Synchronize to a named remote from your SSH config
sy -r me# Synchronize the current directory to the last used remote (for that directory)
sy
```By default, `sy` can take on any path within your `$HOME` and will set the corresponding path on the remote's `$HOME`. It is possible to change this behavior or synchronize paths outside of `$HOME` using the `sy-config add-path` command.
`sy` with no argument will sync the current directory using the last remote for that directory (you will need to use the -r flag the first time, but not subsequently).
## Howto
### Ignore files
Add a `.bsync-ignore` file in the root directory to sync with a filename or glob pattern on each line, and they will be ignored. It works more or less like `.gitignore`.
Putting `.bsync-ignore` files in subdirectories to ignore files in these subdirectories will unfortunately not work, so `sy ~/x` and `sy ~/x/y` may synchronize the contents of `~/x/y` differently if both directories contain different `.bsync-ignore` files, or if one has an ignore file and the other does not.
### Global ignores
The `sy-config ignore` command can be used to generally ignore files or directories:
```bash
# Edit the ignore file using $EDITOR, if it is set
sy-config ignore# List all existing ignores
sy-config ignore -l# Ignore all files that end with ~
# Do not forget the single quotes here, to avoid shell expansion!
sy-config ignore '*~'# Unignore files that end with ~
sy-config ignore -r '*~'
```The ignores work mostly like `.gitignore` or `.bsync-ignore` above, but they apply globally. Note that `sy` will also read *remote-side* global ignores when syncing to a remote. Global ignores are located at `$HOME/.config/synecure/ignore`, so a remote can define some global ignores even without installing `sy` remote-side. Global ignores local-side, remote-side, as well as `.bsync-ignore` files local-side and remote-side are all merged together.
### Customize synchronization paths
To synchronize local `/etc` to remote `/etcetera`, for named remote `desktop`:
```bash
sy-config add-path desktop /etc /etcetera
```Obviously, this will only work if the remote user has the permissions to write to `/etcetera`. You can have multiple remotes for the same host with different users, if that helps.
To synchronize local `~/hello` to remote `~/bonjour`:
```bash
sy-config add-path desktop ~/hello bonjour
```Don't use `~` for the remote path, it will complete to the wrong thing.
To list available remotes and paths:
```bash
sy-config list
```### Sync local directories
```bash
sy-config add dropbox file://~/Dropbox
```## Other options
### Dry run
Use the `-n` flag to perform a "dry run": `sy` (well, `bsync`) will report all the transfers that would occur but it will not perform them.
Use `--show-plan` to get the sequence of commands that `sy` will run.
### Conflict resolution
Whenever a file was modified on both ends since the last sync, `sy` will ask which one you want to keep.
Use `sy --resolve local` (or `sy -1`) to always keep the local file without prompting, or `--resolve remote` (or `-2`) to always keep the remote file.
### List directories
`sy -l` will list all directories that have been previously synced using the tool, along with the last remote they were synced to (remember that `sy` without the `-r` option will sync to the last remote).
## Configuration files
* `~/.config/synecure/remotes.json` defines protocols and paths for named remotes.
* You can open an editor for that file with `sy-config edit`
* `~/.config/synecure/ignore` lists global ignores.
* You can open an editor for that file with `sy-config ignore`
* `~/.config/synecure/directories.json` maps directories to last used remotes.
* `~/.ssh/config` is the standard location to define host information for `ssh`.
* For convenience, you can open an editor for that file with `sy-config ssh`