Как использовать rsync через FTP
Любой unix:
У меня есть следующая строка cmd, которая отлично работает.
rsync -avr -e ssh /home /dir [email protected]: /home /
Но мне нужно настроить его сейчас на rsync на удаленный сервер, на котором есть только FTP-сервер. Как мне это сделать?
Я посмотрел на rsync-справку, но быстро заблудился (я не очень часто делаю это).
17 ответов
Нет. rsync не может этого сделать для вас, это собственный протокол и не работает через FTP.
Однако вы можете попробовать csync . IIRC обеспечивает rsync-подобное поведение по HTTP. Я не могу прокомментировать, работает ли он по FTP, вам придется попробовать.
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 "
Как написано мольбертом , 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
.
В зависимости от того, что вы на самом деле пытаетесь сделать, другим совершенно другим подходом может быть использование curlftps
для монтирования ftp-папки, а затем, возможно, rsync
два "локальных ".
Установка зависит от вашего дистрибутива, поэтому я не могу обобщить это, но вам нужно установить fuse
и curlftpfs
(у Прокси Debian уже есть fuse
по умолчанию), затем:
-
sudo apt-get install curlftpfs
-
Убедитесь, что модуль
fuse
загружен (modprobe fuse
) -
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
).
Существует weex ...
Weex - это утилита, предназначенная для автоматизировать задачу удаленного ведение веб-страницы или другого FTP-сервера архив. Он будет синхронизировать набор локальных файлов на удаленный сервер выполнение загрузок и удаленных удалений как требуется.
rsync не работает над ftp. На удаленной стороне ему нужен либо демон rsync, либо оболочка, из которой он может вызывать rsync. Ftp обычно позволяет вам вызывать несколько команд, а rsync не является одним из них. Существуют и другие инструменты, предназначенные для автоматизации ftp-задач, таких как «lftp».
Это кажется хорошей и свободной: https://savannah.gnu.org/projects /FTPSync /
Для того, что вы пытаетесь сделать, вы также можете использовать wget.
Вы можете использовать curlftpfs для монтирования ftp и использования rsync после http://linux.die.net/man/1/curlftpfs
Я использую GVFS /FTP. Я монтирую свои удаленные FTP-серверы с помощью gigolo. Поскольку они рассматриваются как локальные каталоги, работает почти все, что работает с локальными файлами. rsync предназначен для точного вычисления хэшей файлов для сравнения файлов без их переноса, но при этом виртуальные файлы передают файлы в любом случае. unison и freefilesync нормально работают, но я столкнулся с проблемой, когда они хотят переименовать файл, который вы загрузили, без проблем. Это может быть проблемой с gvfs 1.6.1.
Решение Jonas S может быть полезно в зависимости от обстоятельств, например, если у вас высокая скорость загрузки и медленная загрузка, проверка файлов на сервере может быть относительно быстрой, чем загрузка файлов без необходимости.
Вероятно, вы хотите использовать CurlFTPFS: пакеты http: //. ubuntu.com/search?suite=default§ion=all&arch=any&searchon=names&keywords=curlftpfs
Хотя, как правило, лучше использовать обычный FTP-клиент вообще вместо rsync.
Я не верю, что вы сможете это сделать, сервер, на котором вы пытаетесь выполнить Rsync, будет работать только на FTP-сервере, он не поймет команды, которые Rsync его отправляет.
Если причина, по которой вы хотите сделать это, заключается в том, что у вас есть только доступ к порту 21, но у вас есть контроль над сервером, вы можете изменить порт Rsync, который прослушивается на сервере, но это, очевидно, полезно только в том случае, если вы не хотите использовать FTP на этом порту.
Если вы хотите автоматизировать задачу, используйте 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 /
Это сделает все остальное для вас. Удачи.
Использование â € œsitecopy или â € œmirrorâ € может сэкономить вам много полосы пропускания.
Оба они обрабатывают эффективное инкрементное обновление.
Также есть wput:
wput --timestamping --reupload --dont-continue исходные файлы ftp://target.host/dir
Имя пользователя и пароль считываются с ~ /.netrc. В противном случае, если вы не особенно обеспокоены безопасностью, вы можете указать их как ftp: //имя пользователя: пароль @ target .host .
Я сделал собственный инструмент командной строки для этого: 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 '
Установите sftp , а затем вы можете использовать rsync.
Я использую следующий.
rsync --delete --times --recursive --perms --owner --group --verbose --progress --stats -e ssh [email protected]: /folder1 //folder2 /