Como FTP várias pastas para outro servidor usando mput no Unix?

18

Estou logado em um servidor (usando o Putty). de lá eu estou conectando usando FTP para outro servidor. Quero copiar várias pastas do primeiro servidor para o segundo usando mput.

Gostar:

ftp> mput folder1 folder2 folder3

Mas eu recebo "folder1: não é um arquivo simples." ... e assim por diante. Cada uma dessas pastas possui subpastas, arquivos (alguns binários, outros não).

Como posso realizar o que quero sem compactar o material e depois transferi-lo?

7ochem
fonte

Respostas:

19

O FTP da linha de comando é bastante primitivo.

Você não pode enviar recursivamente arquivos / pastas para um site remoto.

Se você deseja recriar uma estrutura de diretórios no lado remoto da mesma forma que o local, é necessário manualmente mkdircada caminho e usar mput *para enviar tudo nesse diretório para o lado remoto.

Duas opções para facilitar isso:

  1. Pare de usar o comando FTP primitivo (o ncftp é uma boa alternativa)

  2. Use tar para tar as pastas, envie o arquivo e extraia do outro lado.

Philip Reynolds
fonte
11
+1 para tar-> put-> untar
dave
11
-1 Porque a pergunta é "Como posso realizar o que quero sem compactar o material e depois transferi-lo?", O que implica que a pessoa não tem acesso ao shell da máquina remota.
Steen Schütt
11

Isso não é possível com o programa ftp normal, pois o mput não usa recursão. Você pode usar o ncftp e depois chamar 'mput -r folder'.

Muitas felicidades, Fabian

halfdan
fonte
Foi exatamente o que fiz recentemente em uma caixa RHEL 5. No pacote EPEL, o executável é denominado ncftpput.
Suppressingfire #
Não é possível alterar nada na configuração do servidor. Eu sou apenas um usuário ...
Depende do seu cliente. Não no servidor.
Halfdan 04/12
Eu prefiro fazer assim. Obrigado.
Mojtaba Rezaeian
11

Eu fiz um script 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

e chamou com

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

parece funcionar.

Stein Åsmul
fonte
0

O Secure Copy scp possui um sinalizador -r recursivo que você pode achar útil.

Michael
fonte
A pergunta é sobre o acesso ftp simples. Não o scp / sftp!
Mojtaba Rezaeian
-1

abra o CD do powershell no diretório que você deseja enviar, execute os seguintes comandos:

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

Cole os resultados na sua janela ftp. Desfrutar. Também não se esqueça de adicionar mput * para transferir todos os arquivos do diretório base.

Learn Powershell
fonte
6
Desde quando o PowerShell é executado em um sistema Unix?
Michael Hampton