ftpsuite
Four small FTP tools that share one config and move files in both directions: a push, a pull, a terminal UI, and a windowed UI. Define a site and its folder pairs once — every tool can use them. POSIX shell + lftp; the windowed UI is Tcl/Tk. No Python anywhere.
The four tools
ftpush upload
Upload files and folders. Reports each one as Created or Overwritten.
ftpush -s 2 index.html assets/
ftpull download
Download — the mirror image of ftpush. --mirror pulls a whole pair (or site) down in one go.
ftpull --mirror -s 1
ftps-cli terminal UI
Terminal UI (ncurses). Queue transfers across any sites and pairs, both directions, then run them all at once.
ftps-cli
ftps-gui windowed UI
Windowed two-pane view, Midnight-Commander style — LOCAL | REMOTE, multi-select, up/down transfer.
ftps-gui
How the config works
Every tool reads one shared file — ~/.config/ftpush/ftpush.json. It holds
sites (host / port / user / password) and, per site, any number of
source ↔ destination pairs (a local directory mapped to a remote
directory). Point a tool at a path and it finds the pair whose prefix is the
longest match and substitutes the other side — so the same command works no
matter how deeply nested the file is, in either direction.
Sites are selected by number everywhere (ftpush --sites lists them).
Manage everything from either CLI tool:
ftpush --add-site # name, host, port, user, masked password ftpush --add-pair -s 1 # a local dir <-> remote dir ftpush --pairs -s 1 # list a site's pairs, numbered ftpush --export backup.json # ftpush --import backup.json to restore
Install
tar -xzf ftpsuite.tar.gz cd ftpsuite sh ftpsuite-install.sh
The installer puts the four tools on your PATH, installs the shared library and
the four man pages, and installs the dependencies it finds missing —
lftp (required), dialog (for ftps-cli), and tk (for ftps-gui) —
via your system package manager (apt/nala, pacman, dnf, zypper, apk, or Homebrew).
It never touches your config.
First run
# add a site + a folder pair ftpush --add-site ftpush --add-pair # then, in either direction: ftpush /home/me/site/index.html # upload ftpull /public_html/index.html # download ftps-cli # terminal UI ftps-gui # windowed UI
Full docs: man ftpush, man ftpull, man ftps-cli, man ftps-gui
(each tool also has --help).
Notes
- Runs identically under
sh,bash, andzsh. - No Python — POSIX shell +
lftp; the windowed UI is Tcl/Tk. - Credentials live only in your local config file (0600), read at run time.
- Free & open, no signup. Your data and credentials stay on your machine.