An interactive fzf picker for copying selected folders from SSH servers with
rsync. It is a small Zsh script: configure a server once, select it, pick the
remote folders you want, and sync them into a local directory.
- Zsh
sshwith an already-working authentication setuprsync(3.x recommended)fzf
syncpick works on macOS and Linux when these tools are available. It discovers
executables through PATH; a profile can override the ssh or rsync path.
On macOS or Linux with Homebrew:
brew install Cyberlane/tap/syncpickClone this repository, then run:
./installThis creates ~/.local/bin/syncpick (or $XDG_BIN_HOME/syncpick). Ensure that
directory is in your PATH.
For an optional sp shorthand command:
./install --with-aliasCreate your first server profile:
syncpick --initSetup asks for only a server name, its SSH host, and the remote folder roots to
browse. syncpick auto-detects ssh and rsync and starts with safe transfer
defaults. Use syncpick --configure later for executable overrides, deletion,
or in-place-write preferences. The source-folder manager adds and removes one
path at a time and verifies new paths over SSH when possible.
Then run syncpick in the directory where copies should go:
cd ~/Downloads
syncpickThe server picker remembers the last successfully synced profile. Use
syncpick --configure to add, edit, or remove profiles, or select one directly:
syncpick --server home-nas ~/Downloads
syncpick --dry-runThe folder picker lists directories only. > is the navigation cursor and ✓
marks folders queued to sync: after marking one or more folders with Tab, only
those checked folders transfer. If nothing is checked, pressing Enter transfers
the cursor folder; the confirmation screen always lists exactly what will sync.
The parent portion of each path is muted and its final folder name highlighted
by default; disable that per profile under Highlight folder names in
syncpick --configure if you prefer plain paths. Under Queued folder path
display, choose whether the queue shows full paths, shortened paths such as
…/media/show, or folder names only. The same highlighting is used in the
queue whenever it is enabled.
For long lists, the right-hand Queued folders pane shows every checked
folder as you select it. Press Ctrl-P to hide or restore that pane.
syncpick asks before a real transfer. It does not delete unmatched local files, and uses rsync's safer temporary-file behavior by default.
For a non-interactive run, pass --yes (or -y) to accept the final transfer
summary automatically:
syncpick --server home-nas --yes ~/DownloadsDeletion and --inplace writes can be set per profile in the settings TUI or
enabled for one run:
syncpick --delete
syncpick --inplaceUse --dry-run before a large or destructive transfer.
Profiles are stored locally at $XDG_CONFIG_HOME/syncpick (default:
~/.config/syncpick); recent-profile state is stored at $XDG_STATE_HOME/syncpick
(default: ~/.local/state/syncpick). These directories and profile files are
created with private permissions.
Profiles contain a display name, SSH host, source folders, optional executable overrides, and sync defaults. They do not store passwords, private keys, or passphrases—use your SSH configuration, agent, or keychain for authentication. Do not paste sensitive hostnames, usernames, IP addresses, folder names, or transfer output into public issues.
syncpick is a portable source script, so compiled binaries are unnecessary. Releases use semantic versioning and are available through the Cyberlane Homebrew tap as well as the source repository.
See CONTRIBUTING.md. Please report vulnerabilities privately as described in SECURITY.md.
MIT.
