How to use rsync over FTP
rsync isn't going to work for you for the reasons others have mentioned. However, lftp and ncftp both have "mirror" modes that will probably meet your needs.
I use this to push stuff from my local directory to a ftp or sftp web host:
lftp -c "set ftp:list-options -a; open ftp://user:[email protected]; lcd ./web; cd /web/public_html; mirror --reverse --delete --use-cache --verbose --allow-chown --allow-suid --no-umask --parallel=2 --exclude-glob .svn"
As written by easel,
lftp is a good tool.
I suggest you to parametrize the script, and make use of the
options, that excludes filenames using the glob feature (*,? ..) of your shell:
#!/bin/bash HOST="your.ftp.host.dom" USER="username" PASS="password" FTPURL="ftp://$USER:$PASS@$HOST" LCD="/path/of/your/local/dir" RCD="/path/of/your/remote/dir" #DELETE="--delete" lftp -c "set ftp:list-options -a; open '$FTPURL'; lcd $LCD; cd $RCD; mirror --reverse \ $DELETE \ --verbose \ --exclude-glob a-dir-to-exclude/ \ --exclude-glob a-file-to-exclude \ --exclude-glob a-file-group-to-exclude* \ --exclude-glob other-files-to-exclude"
Warning: make sure that the target directory exists, otherwise the cd command will fail, so operation including deleting trees of files will take place at wrong directory (root)!
I have updated script so that
--delete option is disabled by defaut, enable it by uncommenting the
You don't. rsync can't do that for you, it is a protocol of its own and doesn't work over FTP.
You might, however, want to try csync. IIRC it provides rsync-like behaviour over HTTP. I can't comment on whether it works over FTP, you'll have to try it.
Depending of what you're actually trying to do, another completely different approach could be use
curlftps to mount a ftp folder, and then maybe
rsync the two "local" folders.
The installation is different depending on your distro so I can't generalize on that, but you need to install
curlftpfs (prolly Debian already has
fuse install by default), then:
sudo apt-get install curlftpfs
Make sure the
fusemodule is loaded (
sudo curlftpfs ftp.yourserver.com /path/to/ftp/folder/ -o user=username:password,allow_other
Note that there's no space after the last comma (it's not a typo!). If you're satisfied with that or don't want to make that every time, you can add it to your fstab (usually in
curlftpfs#user:[email protected] /path/to/ftp/folder/ fuse auto,user,uid=1000,allow_other 0 0
In that case, you have to make sure the fuse module is loaded before.
Be advised though, of two things:
- That the developer dropped the project one or two years ago, so I don't know how usable/stable for the time being.
- If the password contains a weird character
curlftpfscould fail (maybe you can do something with the
There is weex...
Weex is an utility designed to automate the task of remotely maintaining a web page or other FTP archive. It will synchronize a set of local files to a remote server by performing uploads and remote deletes as required.