My webhost only provides SFTP access (which is not surprising given what I pay…). But this can become annoying for maintaining things like a package repository where I would like to keep the remote files in sync with my local copy. My first thought was to go with a FUSE based solution in combination with rsync. Looking into the current best options to mount the remote directory (probably sshfs), I was eventually lead to LftpFS and on to its underlying software LFTP.
LFTP is a sophisticate command-line file transfer program with its own shell-like command syntax. This allows syncing from my local repo copy to the remote server in a single command:
lftp -c "open -u <user>,<password> <host url>; mirror -c -e -R -L <path from> <path to>"
The -c flag tell LFTP to run the following commands (separated by a semicolon). I use two commands; the open command (should be obvious what it does…) and a mirror command. The only real “trick” there is to add -L to the mirror command, which makes symlinks be uploaded as the files they point to. This is required as the FTP protocol does not support symlinks and repo-add generates some.
That was exactly what I needed and it makes a nice bash alias being a single command.
How is this better than rsync?
Good to see you read the post… It works without having to mounting the remote filesystem using fuse.
rsync supports ssh, so you don’t need fuse.
ssh != sftp…
My bad. I always thought SFTP was SCP. Now I know I’m wrong. Thanks!