it-swarm-ru.tech

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

Любой юникс:

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

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

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

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

191
bumperbox

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

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

80
serverhorror

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

Я использую это для отправки содержимого из моего локального каталога на веб-хостинг ftp или sftp:

lftp -c "set ftp:list-options -a;
open 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"
163
easel

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

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

exclude-glob

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

#!/bin/bash    
Host="your.ftp.Host.dom"
USER="username"
PASS="password"
FTPURL="ftp://$USER:[email protected]$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 опция отключена по умолчанию, включите ее, раскомментировав DELETE= command.

123
GabrieleV

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

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

  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:[email protected] /path/to/ftp/folder/ Fuse auto,user,uid=1000,allow_other 0 0

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

Имейте в виду, однако, две вещи:

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

Есть weex ...

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

16
Johan

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

9
Ian Kelling

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

8
pauska

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

wget -m ftp: // имя пользователя: [email protected]

7
Aaron

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

5
shaftmx

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

4
Papou

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

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

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

3
user25738

Если вы хотите автоматизировать задачу, тогда используйте 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/

Он сделает все остальное за вас ... удачи

2
desdecode

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

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

2
Sam Cogan

rclone - это хорошая программа, которая выполняет синхронизацию каталогов по ftp и многим другим протоколам, включая провайдеров облачных хранилищ (Amazon S3, Dropbox, Google Drive). Он может синхронизироваться с любой комбинацией локального или удаленного хранилища.

Для настройки удаленного ftp следуйте эти инструкции .

Как только это будет сделано, операция синхронизации:

rclone sync /home/dir FTP_REMOTE:/home --progress 
1
bernie

Использование "sitecopy" или "mirror" может сэкономить вам большую пропускную способность.

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

1
Kan-Ru Chen

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

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

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

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

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

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

ftpsync -c '...'

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

ftpsync -c 'PASV; TYPE I; STOR some_file.ext; RNFR some_file.ext; RNTO some_file_renamed.ext'
0
superdario128

Также есть wput:

wput --timestamping --reupload --dont-continue source-files ftp://target.Host/dir

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

0
Ole Wolf