How to use rsync over FTP
Any unix:
I have the following cmd line which works fine.
rsync -avr -e ssh /home/dir [email protected]:/home/
But I need to set it up now to rsync to a remote server that only has an FTP server on it. How do I go about that?
I looked at the rsync help but quickly got lost (I don't do this stuff very often).
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.
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
exclude-glob
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 DELETE= command
.