26 stable releases

new 1.3.5 May 14, 2025
1.3.3 May 10, 2025
1.2.0 Mar 18, 2025
1.1.1 Feb 16, 2025

#334 in Filesystem

Download history 246/week @ 2025-02-12 74/week @ 2025-02-19 16/week @ 2025-02-26 56/week @ 2025-03-12 63/week @ 2025-03-19 2/week @ 2025-04-02 34/week @ 2025-04-30 2419/week @ 2025-05-07

2,453 downloads per month

MIT license

31KB
609 lines

sync-rs

A simple tool for syncing local directories to remote servers using rsync and SSH.

Features

  • Sync local directories to remote servers using rsync
  • Support for multiple remote configurations per directory
  • Automatic .gitignore filtering
  • Additional ignore patterns support
  • Post-sync command execution
  • Interactive remote shell access
  • Preferred remote selection for automatic use
  • Cache-based configuration management

Installation

cargo install sync-rs

Usage

Basic usage:

sync-rs user@host remote_dir

Command Line Options

  • -o, --override-path: Additional paths to sync (can specify multiple)
  • -c, --post-command: Post-sync command to execute
  • -s, --shell: Open an interactive shell in the remote directory after syncing
  • -n, --name: Name for this remote configuration (used when managing multiple remotes)
  • -l, --list: List all remote configurations for the current directory
  • -r, --remove: Remove a remote configuration by name
  • -d, --delete-override: Enable delete mode for override paths (default: disabled)
  • -P, --preferred: Set this remote as the preferred one for this directory
  • -i, --ignore: Patterns to ignore (can specify multiple)

Examples

  1. Sync to a remote server:
sync-rs user@host remote_dir
  1. Sync with additional paths and post-sync command:
sync-rs user@host remote_dir -o path1 -o path2 -c "npm install"
  1. Open an interactive shell after syncing:
sync-rs user@host remote_dir -s
  1. Create a named remote configuration:
sync-rs user@host remote_dir -n my-remote
  1. List all remote configurations:
sync-rs -l
  1. Remove a remote configuration:
sync-rs -r my-remote
  1. Set a remote as preferred:
sync-rs -n my-remote -P
  1. Sync with additional ignore patterns:
sync-rs user@host remote_dir -i "*.tmp" -i "build/"

Preferred Remotes

When you have multiple remote configurations for a directory, you can set one as preferred:

  1. Set a remote as preferred:
sync-rs -n my-remote -P
  1. List remotes to see which one is preferred:
sync-rs -l

When running sync without specifying a remote, it will automatically use the preferred remote if one exists. If no preferred remote is set, it will prompt you to select one.

Ignore Patterns

By default, sync-rs uses .gitignore to filter files. You can specify additional patterns to ignore:

sync-rs -i "*.tmp" -i "build/" -i "node_modules/"

These patterns will be used alongside .gitignore when filtering files for syncing. The patterns follow rsync's exclude format.

Requirements

  • Unix-like environment (Linux or macOS)
  • rsync
  • SSH

License

MIT

Dependencies

~2–13MB
~97K SLoC