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

Любой unix:

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

rsync -avr -e ssh /home /dir [email protected]: /home /

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

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

173 голоса | спросил bumperbox 12 J0000006Europe/Moscow 2009, 13:51:36

17 ответов


75

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

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

ответил serverhorror 12 J0000006Europe/Moscow 2009, 14:00:21
155

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

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

Я использую это, чтобы вытащить материал из моего локального каталога на веб-узел ftp или sftp:

lftp -c "set ftp: list-options -a;
открыть 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 "
ответил easel 12 J0000006Europe/Moscow 2009, 18:58:34
118

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

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

исключить-Глоб

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

 #! /bin /bash
HOST = "your.ftp.host.dom"
USER = "имя пользователя"
PASS = "пароль"
FTPURL = "FTP: //$ USER: $ PASS @ $ HOST"
LCD = "/путь /из /вашего /местные /реж"
RCD = "/путь /из /вашего /удаленного /реж"
Удалять = «- удалить»
lftp -c "set ftp: list-options -a;
открыть '$ FTPURL';
ЖК-дисплей LCD;
cd $ RCD;
зеркало - обратное \
       $ DELETE \
       --подробный \
       --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.

ответил GabrieleV 26 Jpm1000000pmTue, 26 Jan 2010 14:58:05 +030010 2010, 14:58:05
23

В зависимости от того, что вы на самом деле пытаетесь сделать, другим совершенно другим подходом может быть использование 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 = имя пользователя: пароль, allow_other

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

curlftpfs # user: [email protected] /path /to /ftp /folder /fuse auto, user, uid = 1000, allow_other 0 0

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

Будьте внимательны, из двух вещей:

  • Чтобы разработчик отказался от проекта один или два года назад, поэтому я пока не знаю, как использовать /стабильно.
  • Если пароль содержит странный символ curlftpfs может завершиться неудачно (возможно, вы можете что-то сделать с помощью .netrc).
ответил Pablo Olmos de Aguilera C. 11 SatEurope/Moscow2010-12-11T15:39:36+03:00Europe/Moscow12bEurope/MoscowSat, 11 Dec 2010 15:39:36 +0300 2010, 15:39:36
14

Существует weex ...

  

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

ответил Johan 17 PM00000060000003831 2009, 18:38:38
9

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

ответил Ian Kelling 12 J0000006Europe/Moscow 2009, 14:03:30
7

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

ответил pauska 12 J0000006Europe/Moscow 2009, 19:02:10
6

Для того, что вы пытаетесь сделать, вы также можете использовать wget.

wget -m ftp: //имя пользователя: пароль@domain.com

ответил 25 FebruaryEurope/MoscowbThu, 25 Feb 2010 21:12:05 +0300000000pmThu, 25 Feb 2010 21:12:05 +030010 2010, 21:12:05
5

Вы можете использовать curlftpfs для монтирования ftp и использования rsync после http://linux.die.net/man/1/curlftpfs

ответил shaftmx 10 MonEurope/Moscow2012-12-10T01:47:18+04:00Europe/Moscow12bEurope/MoscowMon, 10 Dec 2012 01:47:18 +0400 2012, 01:47:18
4

Я использую GVFS /FTP. Я монтирую свои удаленные FTP-серверы с помощью gigolo. Поскольку они рассматриваются как локальные каталоги, работает почти все, что работает с локальными файлами. rsync предназначен для точного вычисления хэшей файлов для сравнения файлов без их переноса, но при этом виртуальные файлы передают файлы в любом случае. unison и freefilesync нормально работают, но я столкнулся с проблемой, когда они хотят переименовать файл, который вы загрузили, без проблем. Это может быть проблемой с gvfs 1.6.1.

ответил Papou 29 42012vEurope/Moscow11bEurope/MoscowThu, 29 Nov 2012 21:55:07 +0400 2012, 21:55:07
3

Решение Jonas S может быть полезно в зависимости от обстоятельств, например, если у вас высокая скорость загрузки и медленная загрузка, проверка файлов на сервере может быть относительно быстрой, чем загрузка файлов без необходимости.

Вероятно, вы хотите использовать CurlFTPFS: пакеты http: //. ubuntu.com/search?suite=default&section=all&arch=any&searchon=names&keywords=curlftpfs

Хотя, как правило, лучше использовать обычный FTP-клиент вообще вместо rsync.

ответил 11 32009vEurope/Moscow11bEurope/MoscowWed, 11 Nov 2009 13:06:07 +0300 2009, 13:06:07
2

Я не верю, что вы сможете это сделать, сервер, на котором вы пытаетесь выполнить Rsync, будет работать только на FTP-сервере, он не поймет команды, которые Rsync его отправляет.

Если причина, по которой вы хотите сделать это, заключается в том, что у вас есть только доступ к порту 21, но у вас есть контроль над сервером, вы можете изменить порт Rsync, который прослушивается на сервере, но это, очевидно, полезно только в том случае, если вы не хотите использовать FTP на этом порту.

ответил Sam Cogan 12 J0000006Europe/Moscow 2009, 14:00:42
2

Если вы хотите автоматизировать задачу, используйте lftp, так как вы можете создать скрипт, как некоторые люди разместили выше, вы можете легко сценарий по своему усмотрению, если вы ищете одноразовое решение (то есть вам нужно скачать весь сайт через ftp /переместить его на другой сервер) используйте ncftp, его простую, установите, если он еще не установлен:

apt-get install ncftp

или

yum install ncftp

(извините не debian /red hat на основе дистрибутивов ..)

после установки, откройте ncftp в терминале, затем введите:

open -u ftpusername ftp.thedomain.com

Он попросит вас ввести пароль, введите его, а затем:

get -R /home /remotewebsite /public_html //home /localwebsite /public_html /

Это сделает все остальное для вас. Удачи.

ответил desdecode 6 J000000Wednesday11 2011, 00:37:34
0

Использование â € œsitecopy или â € œmirrorâ € может сэкономить вам много полосы пропускания.

Оба они обрабатывают эффективное инкрементное обновление.

ответил Kan-Ru Chen 25 +04002010-10-25T03:46:06+04:00312010bEurope/MoscowMon, 25 Oct 2010 03:46:06 +0400 2010, 03:46:06
0

Также есть wput:

wput --timestamping --reupload --dont-continue исходные файлы ftp://target.host/dir

Имя пользователя и пароль считываются с ~ /.netrc. В противном случае, если вы не особенно обеспокоены безопасностью, вы можете указать их как ftp: //имя пользователя: пароль @ target .host .

ответил Ole Wolf 18 FebruaryEurope/MoscowbThu, 18 Feb 2016 16:20:30 +0300000000pmThu, 18 Feb 2016 16:20:30 +030016 2016, 16:20:30
0

Я сделал собственный инструмент командной строки для этого: ftpsync

Почему? Поскольку это просто и элегантно, другие инструменты требуют большого количества зависимостей, иногда компилируются, иногда не работают (например, lftp на MacOs High Sierra). Ftpsync написан на чистом Python, не требует сторонних библиотек, и он мал, вы можете просто включить файл в свой проект.

Использование: cd в каталог проекта и введите:

ftpsync user: [email protected]/remote/dir --delete

- delete означает удаление удаленных файлов, которые не существуют локально.

Если вы не хотите синхронизировать, а просто запускаете команду raw ftp, используйте:

ftpsync -c '...'

Это полезно для некоторых простых операций, таких как отправка файла и его переименование:

ftpsync -c 'PASV; ТИП I; STOR some_file.ext; RNFR some_file.ext; RNTO some_file_renamed.ext '
ответил superdario128 29 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 29 Sep 2017 13:19:31 +0300 2017, 13:19:31
-7

Установите sftp , а затем вы можете использовать rsync.

Я использую следующий.

rsync --delete --times --recursive --perms --owner --group --verbose --progress --stats -e ssh [email protected]: /folder1 //folder2 /
ответил Rajat 12 J0000006Europe/Moscow 2009, 16:02:16

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132