Synchronize local directories with FTP servers.

Version:3.1, Date: Dec 26, 2019

Build Status PyPI Version License Documentation Status



Major version updates (1.0 => 2.0, 2.0 => 3.0, …) introduce breaking changes to the previous versions. Make sure to adjust your scripts accordingly after update.


  • This is a command line tool…
  • … and a library for use in custom Python projects.
  • Recursive synchronization of folders on file system and/or FTP targets.
  • Upload, download, and bi-directional synchronization mode.
  • Configurable conflict resolution strategies.
  • Unlike naive implementations, pyftpsync maintains additional meta data to detect conflicts and decide whether to replicate a missing file as deletion or addition.
  • Unlike more complex implementations, pyftpsync does not require a database or a service running on the targets.
  • Optional FTPS (TLS) support.
  • Architecture is open to add other target types.

The command line tool adds:

  • Runs on Linux, OS X, and Windows.
  • Remember passwords in system keyring.
  • Interactive conflict resolution mode.
  • Dry-run mode.


Known Limitations

  • The FTP server must support the MLSD command.
  • pyftpsync uses file size and modification dates to detect file changes. This is efficient, but not as robust as CRC checksums could be.
  • pyftpsync tries to detect conflicts (i.e. simultaneous modifications of local and remote targets) by storing last sync time and size in a separate meta data file inside the local folders. This is not bullet proof and may fail under some conditions.
  • Currently conflicts are not detected, when a file is edited on one target and the parent folder is removed on the peer target: The folder will be removed on sync.

In short: Make sure you have backups.


Releases are hosted on PyPI and can be installed using pip:

$ pip install pyftpsync --upgrade
$ pyftpsync --help