Package: sftpclone
sftpcloneA tool for cloning/syncing a local directory tree with an SFTP server.FeaturesKeep in sync a local directory tree with a specified folder of an SFTP server.Update symbolic links as needed and keep filesconsistent.Automatic tilde expansion/handling on the SFTP server.Public key authentication.ssh_configentries compatibility.Syncing exclusion patterns.Compatible with both Python 2 and Python 3.InstallYou can install sftpclone by using pip:$pipinstallsftpclone--userNote: Sometimes building required dependencies in user mode doesn't work. In that case, you'd need to usesudoand to remove the--userflag.
Alternatively, you could make use of a virtualenv.Alternatively, you can clone this repository and then launch:$gitclonehttps://github.com/unbit/sftpclone
$cdsftpclone
$pythonsetup.pyinstallIn both cases, you'll find the sftpclone script in your path.Usageusage: sftpclone [-h] [-k private-key-path]
                 [-l {CRITICAL,ERROR,WARNING,INFO,DEBUG,NOTSET}] [-p PORT]
                 [-f] [-a] [-c ssh config path] [-n known_hosts path] [-d]
                 [-e exclude-from-file-path] [-t] [-o]
                 local-path user[:password]@hostname:remote-pathWhere, for each command line argument:local-path: The path of the local folder. This path must exists and can contain~(we use tilde expansion).sftp-url: It specifies the remote SFTP url having the form:[user[:password]@]hostname:remote-path. Both the password and the user field can be omitted. If you omit the former then you should specify a private key identity file. If you omit the latter then the current user is automatically used. The hostname can refer to a element of yourssh_configfile. If the remote path contains~, then it will be expanded to the default folder in which the user begins her SFTP session.[h]elp: show the help message and exit.private-[k]ey-path: the path to your private identity file. Set it if you are not using password authentication. It automatically defaults to~/.ssh/id_rsaand can be used more than once.[l]ogging: set the log level (ERROR by default).[p]ort: SSH remote port (defaults to 22).[f]ix-symlinks: if you have absolute symlinks pointing to your synced directory, they will remain consistent on the remote server: i.e., they will have an absolute path that reflect the path of the cloned directory on the server. Useful for cluster configurations.ssh-[a]gent: enable ssh-agent support. Any private-[k]ey-path argument will be ignored.ssh-[c]onfig-path: in the sftp-url's hostname you canspecify an entry of yourssh_configfile. If you are using a non-standard path, you can set it here.k[n]own_hosts path: path to yourknown_hostsfile. Default to~/.ssh/known_hosts.[d]isable-known-hosts:disable remote fingerprintcheck against localknown_hostfile.[e]xclude-from-file-path: the path to a file containing a list of patterns. Each file matched by these patternwill be ignored(not synced).do-not-dele[t]e: do not delete remote files that are missing from the local directory.all[o]w-unknown: do not ask for confirmation before connecting to unknown hosts.Warning: be sure to select aproperremote folder.
The synchronization process will indeed delete any file that doesn't exist in the local folder (unless you turn the-toption on).ssh_configcompatibilityThe hostname in the sftp-url parameter can be a valid entry in assh_configfile. Specifically, your entry should have relevant parameters such as:HostNameUserPortIdentityFileProxyCommandAny value not found will fallback to the CLI arguments.
Anyway, youhave to settheIdentityFilefield, otherwise authentication will try to fallback to~/.ssh/id_rsaand could not work.
The first hostname matching the pattern is chosen (in thessh_configway).known_hostscheckingBy default sftpclone will match the remote host fingerprint against the one contained in your~/.ssh/known_hostsfile.
If this file doesn't exists on your machine, you can specify a different path by using the-noption.
Furthermore, you can disable the check with the-dflag.
Unknown hosts will require the user to authorize the connection. Please note that, even after authorization, theknown_hostfile won't be modified.Exclude listIt takes inspiration from the rsync/tar--exclude-fromflag.You can specify among your command line arguments a file containing a list of patterns, one per each line.
All those files that match any pattern will not be synced with the SFTP server.Lines beginning with;or#are ignored.Each pattern is considered relative to the syncing directory. As a consequence, leading/are ignored.Example; This will exclude any file or directory beginning with foofoo*; This will exclude any file foo in a subdir of the directory bar.bar/*/fooProgrammatic usageYou can find some examples of programmatic usage inside theexamplesdirectory.TestingThis project usesnosefor testing.
In addition, on Python 2 you'll need themockmodule (part of Python standard lib from 3.3).
In both cases, you can install test requirements with:$pipinstall-rtest_requirements.txtThen, You can launch the test suite by using, from the project root directory:$nosetests
$pythonsetup.pytest# alternatively