sftp: carrega todos os arquivos, diretórios e subdiretórios contidos em uma pasta


27

Na máquina AI, tem a pasta

/home/a/

Na máquina BI, tenha a pasta

/home/b/

Desejo transferir todos os arquivos, diretórios e subdiretórios de / home / a em / home / b com sftp Na máquina AI, tentei os comandos:

sftp fibon82@machineB.com
put /home/a/* /home/b/

mas não funciona, recebo a mensagem de erro: "pulando arquivo não-regular / home / a / a1" ... [a1 é um subdiretório de a]
Como eu modifiquei a instrução put?

Obrigado! :)

EDITAR:

Eu resolvi usando scp:

scp -r /home/a/ fibon82@machineB.com:/home/b/

2
put -rteria funcionado também.
WakiMiko

1
Ok, mas como eu poderia saber que para o "comando put" a opção -r está disponível? Se eu olhar aqui apenas a bandeira -P é descrita ... O mesmo no manual Obrigado! :)
fibon82

Você deve postar isso como resposta.
NN

Sim. Em vez de EDITAR sua pergunta com a resposta, você deve responder sua própria pergunta e aceitá-la.

@ fibon82 Para obter o manual atualizado do OpenSSH sftp, consulte o projeto OpenSSH .
Martin Prikryl

Respostas:


21

Embora não seja estritamente equivalente ao sftp, o rsync é uma alternativa muito poderosa para scp e sftp, especialmente ao atualizar as cópias da máquina A para a máquina B, pois não copia os arquivos que não foram alterados; também é capaz de remover arquivos da máquina B que foram excluídos da máquina A (somente quando solicitado, é claro).

No seu caso, a sintaxe seria

rsync -zrp /home/a/ user@remote.host.com:/home/b/

A -ropção é copiar arquivos recursivamente, -zhabilitar a compactação durante a transferência e -ppreservar as permissões do arquivo (criação, edição, etc.) ao copiar, o que é algo que o scp não executa no AFAIK. Muitas outras opções são possíveis; como sempre, leia as manpáginas.


Ah obrigado! :) Uma coisa nova que eu aprendi!
fibon82

@ fibon82: Você é bem-vindo :)
Karolos

1
eu te amo, sincronizei 400 MB de dados em 1 minuto usando apenas seu código. Eu acrescentaria que você também deve usar --progress, caso contrário você estará olhando para o nada sem saber o que está acontecendo (e a que velocidade :)) #
Sandro Antonucci

1
Infelizmente rsyncnão fala sftp-Protocol. Portanto, se você configurar um sftp-chroot usando ssha compilação de,internal-sftp então rsyncfalhará.
Tino

17

Nesse sftpcomando, carrega recursivamente o conteúdo do diretório atual para o diretório atual remoto:

 put -r .

Veja man sftp.


O -rswitch é suportado desde apenas o OpenSSH 5.4 .
Martin Prikryl

1
Observe que o -rswitch é apenas do lado do cliente (parte do sftpcomando). Portanto, o lado do servidor (aqui: recebimento) não precisa do OpenSSH 5.4, apenas o cliente precisa suportá-lo.
Tino

9

scp(cópia segura) é o Linux de fato para transferir arquivos através de um túnel seguro. No seu caso, você desejaria usar a opção recursiva, por exemplo:

scp -r /home/a/ user@remote.host.com:/home/b/

5
sftp e scp são protocolos diferentes, ambos baseados no ssh.
Paradroid

1
Sim, se o servidor permitir apenas o protocolo sftp, esta resposta não funcionará.
рüффп

4

Tente usar

put -r /home/a/ /home/b/

para mais informações confira: este


1
O -rswitch é suportado desde apenas o OpenSSH 5.4 .
Martin Prikryl

Observe que o -rswitch é apenas do lado do cliente (parte do sftpcomando). Portanto, o lado do servidor (aqui: recebimento) não precisa do OpenSSH 5.4, apenas o cliente precisa suportá-lo. E: Essa deve ser a resposta aceita , já que obter (o possivelmente não suportado) rsynccomo resposta a uma pergunta marcada sftpé um pouco confuso.
Tino

0

Na verdade, put -r deve funcionar. Mas a pasta de destino precisa estar presente no seu host remoto:

sftp> put -r sourcefolder
 Uploading sourcefolder/ to /user/folder
 Couldn't canonicalize: No such file or directory
 ....
sftp> mkdir sourcefolder
sftp> put -r sourcefolder
 Uploading sourcefolder/ to /user/folder/sourcefolder
 Entering sourcefolder/
 sourcefolder/file1
 sourcefolder/file2

Você adicionou referência e prova para apoiar o que afirma e confirmou que esta resposta ainda não está respondida em uma das respostas existentes na postagem. Leia sobre "Por que preciso de 50 reputação para comentar" para garantir que você entenda como pode começar a comentar.
Pimp Juice IT

-1

No meu caso rsyncnão foi possível, então usei:

mput -rp /home/a/ /home/b/

Não há mputcomando no OpenSSH sftp. Talvez você se refere psftp?
Martin Prikryl
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.