Pregunta Cómo usar rsync sobre FTP


Cualquier unix:

Tengo la siguiente línea de cmd que funciona bien.

rsync -avr -e ssh /home/dir user@example.com:/home/

Pero necesito configurarlo ahora para que se sincronice con un servidor remoto que solo tenga un servidor FTP. ¿Cómo hago para eso?

Miré la ayuda de rsync pero rápidamente me perdí (no hago esto muy a menudo).


175
2018-06-12 09:51


origen


Esto es similar a preguntar cómo usar HTTP sobre IRC, o cómo usar FTP sobre SMTP ... - Juliano
Tal vez podría explicar algunos de sus razonamientos para querer hacer esto, y luego podemos ayudarlo a encontrar una solución viable. - James
Básicamente intentaba automatizar una copia de seguridad de un servidor de alojamiento compartido y no entendía cómo funcionaba rsync. Me he movido a un vps ahora, y ya no tengo la limitación de ftp - bumperbox
La duplicidad es tu dios scie.nti.st/2013/4/13/… - user956584
Si despliegue es lo que tienes en mente y no te importa NodeJS, echa un vistazo desplegar, perezoso y funciona bien con git. - Frank Nocke


Respuestas:


Usted no rsync no puede hacer eso por usted, es un protocolo propio y no funciona a través de FTP.

Sin embargo, es posible que desee probar csync. IIRC proporciona un comportamiento similar a rsync a través de HTTP. No puedo comentar si funciona a través de FTP, tendrás que probarlo.


76
2018-06-12 10:00



Mirando a la página web de csync, soporta sftp pero no se menciona el soporte para ftp plano. - Keith Thompson


rsync no va a funcionar para usted por las razones que otros han mencionado. Sin embargo, lftp y ncftp ambos tienen modos "espejo" que probablemente satisfagan sus necesidades.

Uso esto para enviar cosas de mi directorio local a un servidor web ftp o sftp:

lftp -c "set ftp:list-options -a;
open ftp://user:password@your.ftp.com; 
lcd ./web;
cd /web/public_html;
mirror --reverse --delete --use-cache --verbose --allow-chown  
--allow-suid --no-umask --parallel=2 --exclude-glob .svn"

156
2018-06-12 14:58



lftp es muy agradable. otro que acabo de descubrir es wput que ha incorporado la limitación de ancho de banda. - karmakaze


Según lo escrito por caballete, lftp Es una buena herramienta.

Le sugiero que parametrice el guión y haga uso del

exclude-glob

opciones, que excluye los nombres de archivo que usan la característica glob (* ,? ..) de su 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"

Advertencia: asegúrese de que el directorio de destino exista, de lo contrario el comando cd fallará, por lo que la operación incluyendo la eliminación de árboles de archivos  Tendrá lugar en el directorio incorrecto (root)!

He actualizado el script para que --delete La opción está deshabilitada por defecto, habilítela sin comentar la DELETE= command.


118
2018-01-26 11:58



Me ayudó un gran grupo. Pero tuve que eliminar el "set ftp: list-options -a;" que en el desorden de las cosas. - mat
¿Hay algo como esto que haga lo mismo sobre SFTP (FTPS?)? - trusktr
Yo haría esto antes cd $RCD, para evitar que un script-con-un-error de escritura borre archivos del directorio incorrecto accidentalmente: set cmd:fail-exit yes. (Parece lftp no se da cuenta de que realmente ha salido, hasta que emita el siguiente comando.) - Y antes cd $LCD Haría esto (en el shell local, es decir, en la parte superior del script): set -eu. - KajMagnus
En realidad, la primera vez que ejecuté mi script, aún no había creado el directorio remoto, por lo que el script falló en el CD en ese directorio no existente. Entonces el guión comenzó a mirror, y por lo tanto --delete: d archivos del directorio incorrecto. (Pero los copié de nuevo, así que en ese caso no importó. Tal vez sea importante para otra persona). - KajMagnus
Además de seguir los consejos de @KajMagnus sobre el uso de 'set -eu' y 'cd $ LCD', agregue 'mkdir -p $ LCD' antes de 'cd $ LCD'; de esta manera, puede estar seguro de que el directorio existe y usted ' re en ello - Paul Gear


Dependiendo de lo que realmente estés tratando de hacer, se podría usar otro enfoque completamente diferente curlftps para montar una carpeta ftp, y luego tal vez rsync Las dos carpetas "locales".

La instalación es diferente dependiendo de su distribución, así que no puedo generalizar eso, pero necesita instalarfuse y curlftpfs (prolly Debian ya tiene fuse instalar por defecto), entonces:

  1. sudo apt-get install curlftpfs

  2. Asegúrate que fuse el módulo está cargado (modprobe fuse)

  3. sudo curlftpfs ftp.yourserver.com /path/to/ftp/folder/ -o user=username:password,allow_other

Tenga en cuenta que no hay espacio después de la última coma (¡no es un error tipográfico!). Si está satisfecho con eso o no quiere hacerlo cada vez, puede agregarlo a su fstab (generalmente en /etc/fstab):

curlftpfs#user:password@ftp.yourserver.com /path/to/ftp/folder/ fuse auto,user,uid=1000,allow_other 0 0

En ese caso, debe asegurarse de que el módulo de fusibles esté cargado antes.

Se advierte sin embargo, de dos cosas:

  • Que el desarrollador abandonó el proyecto hace uno o dos años, por lo que no sé cómo es utilizable / estable por el momento.
  • Si la contraseña contiene un carácter extraño curlftpfs podría fallar (tal vez usted puede hacer algo con el .netrc).

23
2017-12-11 12:39



FTP Fuse y rsync son los más cercanos a la pregunta, pero claramente son una locura en todo menos en un pequeño conjunto de archivos pequeños. - Steve-o
¿Por qué sería una locura? Por defecto, rsync stat () s, no compara los contenidos. Eso puede ser hecho por ls -l con un cliente ftp. - ptman
En realidad, intenté esto (a través de rsnapshot) y no funcionó, cada archivo devuelto y error, mostrando que rsync no pudo crear un enlace. Así que usar lftp junto con rsnapshot hizo el truco - Konstantin Pereiaslov
Impecable en 14.04 LTS; un consejo adicional: cuando esté listo para desmontar su sitio FTP, simplemente use umount DIR dónde DIR fue su /path/to/ftp/folder encima. - Joe
2017, y esto todavía funciona! Sinceramente, la forma más fácil de copiar archivos desde un sitio FTP enmasseado. Monte localmente, luego rsync como si fuera local - td512


Ahi esta weex...

Weex es una utilidad diseñada para   automatizar la tarea de forma remota   mantener una página web u otro FTP   archivo. Se sincronizará un conjunto de   archivos locales a un servidor remoto por   realizando cargas y eliminaciones remotas   según sea necesario.


15
2017-08-17 14:38



Funciona como el encanto! Lo estás ejecutando así: $ weex yourFTPconfigName Aquí está el manual linuxcertif.com/man/1/weex - sobi3ch


rsync no funciona sobre ftp. En el lado remoto, necesita el demonio rsync o un shell desde el que pueda llamar a rsync. Por lo general, FTP le permite llamar a algunos comandos y rsync no es uno de ellos. Hay otras herramientas destinadas a automatizar tareas ftp como "lftp".


9
2018-06-12 10:03





Esto parece un ajuste bueno y libre: https://savannah.gnu.org/projects/ftpsync/


8
2018-06-12 15:02



Dada la pila humeante de no tocar con un palo de diez pies SourceForge se ha convertido últimamente, tal vez debería actualizar el enlace a la página web del proyecto. - HopelessN00b


Por lo que parece que estás tratando de hacer, también puedes usar wget.

wget -m ftp: // nombre de usuario: contraseña@dominio.com


6
2018-02-25 18:12



Eso solo hará un espejo del sitio. No puedes usar esto para subir tus modificaciones. - David V.


Puede usar curlftpfs para montar ftp y usar rsync después de http://linux.die.net/man/1/curlftpfs


5
2017-12-09 21:47



Bienvenido a ServerFault! Esto puede ser un buen comienzo, pero algunos detalles más técnicos de por qué este es un mejor enfoque, y posiblemente una maqueta sobre cómo hacerlo, podrían ser razonables. - Scott Pack


Estoy usando GVFS / FTP. Monté mis servidores FTP remotos con gigolo. Como se ven como directorios locales, casi cualquier cosa que trabaje en archivos locales funciona. rsync está diseñado para calcular hashes de archivos de forma remota para comparar archivos sin transferirlos, pero hacerlo con archivos virtuales transfiere los archivos de todos modos. Unison y freefilesync normalmente funcionan bien, pero me encontré con un problema cuando querían cambiar el nombre de un archivo que había cargado, no hay problema para descargarlo. Esto podría ser un problema con gvfs 1.6.1.


4
2017-11-29 17:55