Как скопировать все файлы через FTP в rsync - PullRequest
7 голосов
/ 13 мая 2011

У меня есть онлайн-аккаунт с хостом, который дает мне FTP-аккаунт с именем пользователя и паролем.

У меня есть еще один с copany, который дал мне FTP и rsync.

Теперь я хочу перенести все мои файлы со старого FTP на новый FTP с помощью rync.

Теперь возможно сделать это через rsync только потому, что я не хочу сначала копировать на компьютер, а затем снова загружать

Ответы [ 3 ]

14 голосов
/ 13 мая 2011

Позволяет вызывать аппарат только с FTP src.

Позволяет вызывать аппарат с FTP и SSH dst.

ssh dst
cd destination-direction
wget --mirror --ftp-user=username --ftp-password=password\
     --no-host-directories ftp://src/pathname/

Обратите внимание, что выполнение wget с --ftp-password в командной строке выдаст пароль кому-либо еще в системе. (Также как и передача по проводу в открытом виде, но вы это знали.)

Если у вас нет доступа к wget, то на них может быть установлена ​​ncftp или lftp или ftp. Просто я знаю wget лучшее. :)

Редактировать Чтобы использовать ftp, вам нужно сделать что-то более похожее на:

ftp src
user username
pass password
bin
cd /pathname
ls

На этом этапе запишите все каталоги в удаленной системе. Создайте каждый с !mkdir. Затем перейдите в каталог как локально, так и удаленно:

lcd <dirname>
cd <dirname>
ls

Повторите для всех каталогов. Используйте mget *, чтобы получить все файлы.

Если это выглядит ужасно, то это потому, что это так. FTP не был предназначен для этого, и если у вашего нового хоста нет лучших инструментов (обязательно ищите ncftp и lftp и, возможно, что-то вроде ftpmirror), то либо скомпилируйте лучшие инструменты самостоятельно, либо получите хорошие написание сценариев вокруг плохих инструментов. :)

Или, если бы вы могли получить снаряд на src, это тоже очень помогло бы. FTP просто не предназначен для передачи тысяч файлов.

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

4 голосов
/ 13 мая 2011

Всегда есть надежные файловые системы FUSE, CurlFtpFS и SSHFS .Смонтируйте каждый сервер с соответствующей файловой системой и скопируйте с помощью стандартных утилит.Возможно, это не самый быстрый способ сделать это, но, возможно, наименее трудоемкий.

1 голос
/ 11 июля 2017

Я искал простое решение для синхронизации удаленной папки с локальной папкой через FTP при замене только новых файлов.Я застрял с небольшим wget сценарием, основанным на sarnold s ответа , который, как я думал, могбыть полезным для других, так что вот оно:

#!/bin/bash    
HOST="1.2.3.4"
USER="username"
PASS="password"
LDIR="/path/to/local/dir"    # can be empty
RDIR="/path/to/remote/dir"   # can be empty

cd $LDIR && \                # only start if the cd was successful
wget \
  --continue \               # resume on files that have already been partially transmitted
  --mirror \                 # --recursive --level=inf --timestamping --no-remove-listing
  --no-host-directories \    # don't create 'ftp://src/' folder structure for synced files
  --ftp-user=$USER \
  --ftp-password=$PASS \
    ftp://$HOST/$RDIR
...