Как передать несколько папок на другой сервер с помощью mput в Unix?

18

Я вошел в систему на сервере (используя Putty). оттуда я подключаюсь через FTP к другому серверу. Я хочу скопировать несколько папок с первого сервера на второй сервер, используя mput.

Подобно:

ftp> mput folder1 folder2 folder3

Но я получаю "folder1: не простой файл." ... и так далее. В каждой из этих папок есть подпапки, файлы (некоторые двоичные, некоторые нет).

Как я могу выполнить то, что я хочу, не архивируя вещи, а затем перенести?

7ochem
источник

Ответы:

19

Командная строка FTP довольно примитивна.

Вы не можете рекурсивно отправлять файлы / папки на удаленный сайт.

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

Два варианта, чтобы сделать это проще:

  1. Прекратите использовать примитивную команду FTP (хорошая альтернатива ncftp)

  2. Используйте tar для архивирования папок, отправки файла и извлечения на дальней стороне.

Филип Рейнольдс
источник
1
+1 для tar-> put-> распаковывает
Дэйв
1
-1 Потому что вопрос спрашивает: «Как я могу выполнить то, что я хочу, без архивирования материала, а затем передать?», Подразумевая, что у человека нет доступа к удаленной машине через оболочку.
Стин Шютт,
11

Это невозможно с обычной программой ftp, так как mput не использует рекурсию. Вы можете использовать ncftp, а затем вызвать папку «mput -r».

С наилучшими пожеланиями, Фабиан

Хафдан
источник
Это именно то, что я недавно сделал на коробке RHEL 5. В пакете EPEL исполняемый файл называется ncftpput.
Подавление
Не могу ничего изменить в конфигурации сервера. Я просто пользователь ...
Это зависит от вашего клиента. Не на сервере.
Халфдан
Я предпочитаю делать это так. Спасибо.
Мойтаба Резаян
11

Я сделал bash-скрипт:

#!/bin/bash
ftp_site=ftp.yoursite.net
username=my_user_name
passwd=my_password
remote=/path/to/remote/folder
folder=$1
cd /path/to/local/folder/$folder
pwd
ftp -in <<EOF
open $ftp_site
user $username $passwd
mkdir $remote/$folder
cd $remote/$folder
mput *
close
bye

и назвал это с

find . -type d -exec ./recursive-ftp.sh {} \;

похоже на работу.

Штейн Осмул
источник
0

Secure Copy scp имеет рекурсивный флаг -r, который может оказаться полезным.

Майкл
источник
Вопрос о простом доступе по ftp .. не о scp / sftp!
Мойтаба Резаян
-1

Откройте PowerShell CD в каталог, который вы хотите загрузить, выполните следующие команды:

1. gci -r | % {if ($_.PSIsContainer) {$t = $((($_.fullname -split "\\")[$(((pwd) -split "\\").length)..200]) -join "/"); "mkdir ""$t""`r`nmput ""$t/*"" ""$t"""}} | sc .\mput_all
2. notepad .\mput_all

Вставьте результаты в ваше окно ftp. Наслаждаться. Также не забудьте добавить mput * для передачи всех файлов из базовой директории.

Узнайте Powershell
источник
6
С каких пор PowerShell работает в системе Unix?
Майкл Хэмптон