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 [email protected]
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/ [email protected]:/home/b/
fibon82
fonte
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/ [email protected]:/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.

Karolos
fonte
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.

Carlos Da Costa
fonte
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/ [email protected]:/home/b/
deed02392
fonte
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

guest_who
fonte
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
Dieter
fonte
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/
jayarjo
fonte
Não há mputcomando no OpenSSH sftp. Talvez você se refere psftp?
Martin Prikryl