Вопрос: Как использовать rsync через FTP


Любой unix:

У меня есть следующая строка cmd, которая работает нормально.

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

Но мне нужно настроить его сейчас на rsync на удаленный сервер, на котором есть только FTP-сервер. Как мне это сделать?

Я посмотрел на rsync-справку, но быстро заблудился (я не очень часто делаю это).


173
2018-06-12 09:51


Источник


Это похоже на вопрос, как использовать HTTP через IRC или как использовать FTP через SMTP ... - Juliano
Возможно, вы могли бы объяснить некоторые из ваших рассуждений о желании сделать это, тогда мы сможем помочь вам придумать жизнеспособное решение. - James
по сути, я пытался автоматизировать резервное копирование с общедоступного сервера хостинга и не понимал, как работает rsync. Теперь я перешел на vps и больше не имею ограничений ftp - bumperbox
Дублизм - ваш бог: scie.nti.st/2013/4/13/... - user956584
Если развертывание есть, что у вас на уме, и вы не возражаете против NodeJS, проверьте dploy, ленивый и хорошо работает с git - Frank Nocke


Ответы:


Вы этого не сделаете. rsync не может сделать это для вас, это собственный протокол и не работает через FTP.

Однако вы можете попробовать УпрСИНХ, IIRC обеспечивает rsync-подобное поведение по HTTP. Я не могу прокомментировать, работает ли он по FTP, вам придется попробовать.


75
2018-06-12 10:00



Глядя на Веб-страница csync, он поддерживает sftp, но нет упоминания о поддержке простого ftp. - Keith Thompson


Rsync определенно не собирается работать для вас по причинам, о которых говорили другие.

Тем не менее, lftp и ncftp имеют «зеркальные» режимы, которые, вероятно, будут соответствовать вашим потребностям.

Я использую это, чтобы вытащить материал из моего локального каталога на веб-хост ftp или 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"

155
2018-06-12 14:58



lftp очень приятно. другой, о котором я только что узнал, wput который имеет встроенное ограничение пропускной способности. - karmakaze


Как написано мольберт, lftp является хорошим инструментом.

Я предлагаю вам параметризовать сценарий и использовать

exclude-glob

опции, исключающие имена файлов с помощью функции glob (* ,? ..) вашей оболочки:

#!/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"

Предупреждение: убедитесь, что целевой каталог существует, иначе команда cd не будет выполнена, поэтому операция включая удаление деревьев файлов  будет происходить в неправильном каталоге (root)!

Я обновил скрипт так, чтобы --delete опция отключена defaut, включите ее, раскомментируя DELETE= command,


118
2018-01-26 11:58



Помог мне отличная группа. Но мне пришлось удалить «set ftp: list-options -a;» который там, где беспорядок. - mat
Есть ли что-то подобное, что делает то же самое по SFTP (FTPS?)? - trusktr
Я бы сделал это раньше cd $RCD, чтобы предотвратить случайное удаление файлов из неправильной директории: a-script-with-a-typo: set cmd:fail-exit yes, (Кажется lftp не замечает, что он действительно вышел, пока вы не выполните следующую команду.) - И прежде cd $LCD Я бы сделал это (в локальной оболочке, то есть в верхней части скрипта): set -eu, - KajMagnus
Фактически, при первом запуске моего сценария я еще не создал удаленный каталог, поэтому скрипту не удалось записать компакт-диск в этот несуществующий каталог. Затем скрипт начал mirror, и поэтому --delete: d файлов из неправильного каталога. (Но я скопировал их снова, так что в этом случае это не имело значения. Возможно, это важно для кого-то другого). - KajMagnus
Помимо рекомендаций @KajMagnus об использовании «set -eu» и «cd $ LCD», добавьте «mkdir -p $ LCD» перед «cd $ LCD» - таким образом вы можете быть уверены, что каталог существует, в нем. - Paul Gear


В зависимости от того, что вы на самом деле пытаетесь сделать, можно использовать другой совершенно другой подход curlftps для установки ftp-папки, а затем, возможно, rsync две «локальные» папки.

Установка отличается от вашего дистрибутива, поэтому я не могу обобщить это, но вам нужно установитьfuse а также curlftpfs (Прозрачный Debian уже fuse установите по умолчанию), затем:

  1. sudo apt-get install curlftpfs

  2. Убедитесь, что fuse модуль загружен (modprobe fuse)

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

Обратите внимание, что после последней запятой нет пробела (это не опечатка!). Если вы удовлетворены этим или не хотите делать это каждый раз, вы можете добавить его в свой fstab (обычно в /etc/fstab):

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

В этом случае вы должны убедиться, что модуль плавкого предохранителя загружен раньше.

Однако примите во внимание две вещи:

  • Тот факт, что разработчик отказался от проекта один или два года назад, поэтому я пока не знаю, насколько он полезен / стабилен.
  • Если пароль содержит странный символ curlftpfs может потерпеть неудачу (возможно, вы можете что-то сделать с .netrc).

23
2017-12-11 12:39



FTP Fuse и rsync наиболее близки к вопросу, но явно безумны на чем угодно, кроме небольшого набора небольших файлов. - Steve-o
Почему это было бы безумием? По умолчанию rsync stat () s не сравнивает содержимое. Это можно сделать с помощью ls -l с ftp-клиентом. - ptman
Я действительно пробовал это (через rsnapshot), и он не работал, каждый возвращаемый файл и ошибка, показывающие, что rsync не смог создать ссылку. Поэтому использование lftp в сочетании с rsnapshot делало трюк - Konstantin Pereiaslov
Безупречный 14.04 LTS; дополнительный совет: когда вы готовы отключить свой FTP-сайт, просто используйте umount DIR где DIR Был Ваш /path/to/ftp/folder выше. - Joe
2017, и это все еще работает! Честно говоря, самый простой способ скопировать файлы с FTP-сайта enmasse. Установите локально, затем rsync, как если бы он был локальным - td512


Там есть weex...

Weex - это утилита, предназначенная для   автоматизировать задачу удаленного   ведение веб-страницы или другого FTP-сервера   архив. Он будет синхронизировать набор   локальных файлов на удаленный сервер   выполнение загрузок и удаленных удалений   как требуется.


14
2017-08-17 14:38



Работает как шарм! Вы выполняете его следующим образом: $ weex yourFTPconfigName Вот руководство linuxcertif.com/man/1/weex - sobi3ch


rsync не работает над ftp. На удаленной стороне ему нужен либо демон rsync, либо оболочка, из которой он может вызывать rsync. Ftp обычно позволяет вам вызывать несколько команд, а rsync не является одним из них. Существуют и другие средства, предназначенные для автоматизации ftp-задач, таких как «lftp».


9
2018-06-12 10:03





Это кажется хорошей и свободной: https://savannah.gnu.org/projects/ftpsync/


7
2018-06-12 15:02



Учитывая паровую кучу не-сенсорный с-десять футов полюса SourceForge стал в последнее время, возможно, вам следует обновить ссылку на веб-страница проекта, - HopelessN00b