Любой юникс:
У меня есть следующая строка cmd, которая отлично работает.
rsync -avr -e ssh /home/dir user@example.com:/home/
Но мне нужно настроить его сейчас на rsync для удаленного сервера, на котором есть только FTP-сервер. Как мне это сделать?
Я посмотрел на справку по rsync, но быстро заблудился (я делаю это не очень часто).
Ответы:
Вы не rsync не может сделать это за вас, это собственный протокол, который не работает через FTP.
Однако вы можете попробовать csync . IIRC это обеспечивает rsync-подобное поведение по HTTP. Я не могу комментировать, работает ли он по FTP, вам придется попробовать.
источник
rsync не будет работать на вас по причинам, упомянутым другими. Тем не менее, в lftp и ncftp есть «зеркальные» режимы, которые, вероятно, будут соответствовать вашим потребностям.
Я использую это, чтобы перенести материал из моего локального каталога на веб-хостинг ftp или sftp:
источник
wput
котором я только что узнал, - это встроенное ограничение пропускной способности.Как пишет мольберт ,
lftp
это хороший инструмент.Я предлагаю вам параметризовать сценарий и использовать
параметры, которые исключают имена файлов с помощью функции glob (*,? ..) вашей оболочки:
Предупреждение: убедитесь, что целевой каталог существует, в противном случае команда cd не будет выполнена, поэтому операция, включая удаление деревьев файлов, будет выполняться в неправильном каталоге (root)!
Я обновил скрипт, так что
--delete
опция отключена по умолчанию, включите его, раскомментировавDELETE= command
.источник
cd $RCD
, с тем, чтобы предотвратить-скрипт-с-опечаткой от случайного удаления файлов из неверного каталога:set cmd:fail-exit yes
. (Это , кажется ,lftp
не замечает , что он на самом деле вышел, пока не выдает следующую команду.) - И прежде , чемcd $LCD
я хотел бы сделать это (в локальной оболочке, то есть в верхней части сумы)set -eu
.mirror
, и таким образом--delete
: D файлы из неправильного каталога. (Но я скопировал их обратно, так что в этом случае это не имело значения. Возможно, это важно для кого-то еще.)В зависимости от того, что вы на самом деле пытаетесь сделать, можно использовать другой совершенно другой подход
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=username:password,allow_other
Обратите внимание, что после последней запятой нет пробела (это не опечатка!). Если вас это устраивает или вы не хотите делать это каждый раз, вы можете добавить его в свой fstab (обычно в
/etc/fstab
):В этом случае вы должны убедиться, что модуль предохранителя загружен ранее.
Имейте в виду, однако, две вещи:
curlftpfs
может произойти сбой (возможно, вы можете что-то сделать с помощью.netrc
).источник
umount DIR
гдеDIR
был ваш/path/to/ftp/folder
выше.Есть weex ...
источник
$ weex yourFTPconfigName
Вот руководство linuxcertif.com/man/1/weexrsync не работает поверх ftp. На удаленной стороне ему нужен либо демон rsync, либо оболочка, из которой он может вызывать rsync. Ftp обычно позволяет вам вызывать несколько команд, и rsync не является одной из них. Существуют и другие инструменты, предназначенные для автоматизации задач ftp, такие как «lftp».
источник
Это похоже на хорошую и свободную посадку: https://savannah.gnu.org/projects/ftpsync/
источник
Для того, что вы пытаетесь сделать, вы также можете использовать wget.
wget -m ftp: // имя пользователя: password@domain.com
источник
Вы можете использовать curlftpfs для монтирования ftp и использовать rsync после http://linux.die.net/man/1/curlftpfs
источник
Я использую GVFS / FTP. Я монтирую свои удаленные FTP-серверы с помощью жиголо. Поскольку они рассматриваются как локальные каталоги, почти все, что работает с локальными файлами, работает. rsync предназначен для удаленного вычисления файловых хэшей для сравнения файлов без их передачи, но в любом случае это происходит с виртуальными файлами. Унисон и freefilesync обычно работают хорошо, но я столкнулся с проблемой, когда они хотят переименовать загруженный файл, без проблем при загрузке. Это может быть проблемой с gvfs 1.6.1.
источник
Решение Jonas S может быть полезно в зависимости от обстоятельств, например, если у вас высокая скорость загрузки и медленная загрузка, проверка файлов на сервере может быть относительно быстрее, чем ненужная загрузка файлов.
Вы, вероятно, хотите использовать CurlFTPFS, хотя: http://packages.ubuntu.com/search?suite=default§ion=all&arch=any&searchon=names&keywords=curlftpfs
Хотя, как правило, лучше использовать обычный клиент FTP, а не rsync.
источник
Я не верю, что вы сможете сделать это, на сервере, на котором вы пытаетесь использовать Rsync, будет работать только FTP-сервер, он не будет понимать команды, которые Rsync отправляет ему.
Если причина, по которой вы хотите это сделать, заключается в том, что у вас есть доступ только к порту 21, но у вас есть контроль над сервером, вы можете изменить порт, который Rsync прослушивает на сервере, но это, очевидно, полезно только в том случае, если вы этого не делаете. хочу использовать FTP на этом порту.
источник
Если вы хотите автоматизировать задачу, тогда используйте lftp, поскольку вы можете создать скрипт, как некоторые люди опубликовали выше, вы можете действительно легко написать скрипт по своему вкусу, если вы ищете одноразовое решение (т.е. вам нужно скачать весь сайт). через ftp / переместите его на другой сервер) используйте ncftp, это просто, установите его, если он еще не установлен:
или же
(извините не основанные на Debian / Red Hat дистрибутивы ..)
После установки откройте ncftp в терминале и введите:
Он попросит вас ввести пароль, введите его, а затем:
Это сделает все остальное для вас ... удачи
источник
Использование «sitecopy» или «mirror» может сэкономить вам большую пропускную способность.
Они оба обрабатывают эффективное постепенное обновление.
источник
Также есть wput:
Имя пользователя и пароль читаются из ~ / .netrc. В противном случае, если вы не особенно заинтересованы в безопасности, вы можете указать их как ftp: // username: password@target.host .
источник
Для этого я создал собственный инструмент командной строки: ftpsync
Почему? Поскольку он простой и элегантный, другие инструменты требуют много зависимостей, иногда компиляции, иногда не работают (например, lftp в MacOs High Sierra). Ftpsync написан на чистом Python, не требует сторонних библиотек и имеет небольшой размер, вы можете просто включить файл в свой проект.
Использование: перейдите в каталог вашего проекта и введите:
--delete
выступает за удаление удаленных файлов, которые не существуют локально.Если вы не хотите синхронизироваться, а просто запускаете команду raw ftp, используйте:
Это полезно для некоторых простых операций, таких как отправка файла и переименование его:
источник
rclone - это отличная программа, которая выполняет синхронизацию каталогов по ftp и многим другим протоколам, включая провайдеров облачных хранилищ (Amazon S3, Dropbox, Google Drive). Он может синхронизироваться с любой комбинацией локального или удаленного хранилища.
Для настройки
ftp
пульта следуйте этим инструкциям .Как только это будет сделано, операция синхронизации:
источник
Установите sftp, и тогда вы сможете использовать rsync.
Я использую следующий.
источник