Estou tendo problemas para fazer upload de diretórios (que contêm outros diretórios com alguns níveis de profundidade) pelo sftp. Sei que poderia contornar isso usando gzip, mas não vejo por que isso é necessário.
Enfim, eu tento
sftp> put bin/
Uploading bin/ to /home/earlz/blah/bin
bin/ is not a regular file
sftp> put -r bin/
Uploading bin/ to /home/earlz/blah/bin
Couldn't canonicalise: No such file or directory
Unable to canonicalise path "/home/earlz/blah/bin"
Eu acho que a última mensagem de erro é completamente estúpida. Então o diretório não existe? Por que não criar o diretório?
Existe alguma maneira de contornar esse problema com o sftp, ou devo apenas usar o scp?
sftp
permite aput -r
partir do OpenSSH 5.4Não sei por que o sftp faz isso, mas você só pode copiar recursivamente se o diretório de destino já existir. Então faça isso ...
fonte
-r
precisa OpenSSH 5.4 ou superiorVocê pode estar interessado em usar
rsync
. O comando para isso seriaIsso copiará tudo
bin/
e o colocará no servidor remoto em/home/earlz/blah/bin/
. Como um benefício adicional, ele primeiro verifica se o arquivo no lado remoto não foi alterado e, se não foi, não será reenviado. Além disso, você pode adicionar uma opção -z e a compactará para você.fonte
sftp
é um comando e um protocolo .rsync
não suporta osftp
protocololcd
: sua pasta local (com subpastas)cd
: sua pasta remotaput -r .
fonte
cd
entrando no diretório que eu queria enviar, fiz isso. Obrigado!Posso sugerir uma resposta um tanto complicada, sem fechar, mas incluindo o alcatrão?
Aqui vamos nós:
Isso empacotará o diretório ./bin com tar (-cf: = create file), filename - (none, stdout) e o encaminha através do comando ssh para o target.org (que também pode ser um IP) onde o comando entre aspas é executado, que é: cd para blá e tar -xf (arquivo de extração) - nenhum, nenhum nome, apenas stdin.
É como se você empacote um pacote em casa, leve-o para o correio e depois vá para o trabalho, onde espera o pacote e o abra.
Talvez exista uma solução muito mais elegante que use apenas sftp.
fonte
tar
é uma solução muito boa, no entanto, isso precisa dessh
suporte de login (sftp
é um protocolo diferente no topossh
).tar
, diferentemente de outros, por padrão , é executado recursivamente, transfere todos os arquivos especiais (FIFO, dispositivos de bloco / caractere etc.), tenta converter o mapeamento UID / GID da origem para o sistema de destino e possui uma linha de comando curta tradicional. (Uma exceção, porém: "soquetes de domínio Unix" não são transferidos Mas quem precisa deles.?)pv
ferramenta para assistir a velocidade em transferências longasVocê pode usar o yafc (ainda outro cliente de FTP / SFTP). A
-r
opção funciona muito bem lá.fonte
Você pode usar o rsync , que é 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).
por exemplo :
A opção -r é para copiar arquivos recursivamente, -z ativa a compactação durante a transferência e -p preserva as permissões do arquivo (criação, edição, etc.) ao copiar, o que é algo que o scp não faz no AFAIK. Muitas outras opções são possíveis; como sempre, leia as páginas de manual.
Resposta original de Karolos
fonte
Entre no servidor remoto com ssh, use sftp para conectar-se novamente à sua caixa e use o
get -r
comando para transferir diretórios para o servidor remoto. O comando get permite transferir diretórios recursivamente sem ter o diretório já criado.fonte
Caso SFTP:
Eu precisava copiar essa estrutura no meu ftp:
Isso resolveu meu problema:
fonte
Acabei de aprender com o Arch Linux Wiki que é possível montar o sftp-share usando sshfs. Estou executando um servidor sftp com chroot e jail e sshfs funciona muito bem.
sshfs <sftpuser>@<server>:<read/writable/directory> <your/local/mount/directory>
fusermount -u <your/local/mount/directory>
fonte