Respostas:
sftp, like cpe scp, exige que, ao copiar uma pasta (e seu conteúdo, obviamente), você tenha que dizer explicitamente que deseja transferir a pasta recursivamente com a -ropção
Então, adicione -rao comando.
-rao sftpcomando quando você estiver se conectando. sftp -r user@host
Couldn't canonicalise: No such file or directory.
# sftp user@remote-host #> get -r remote-folder
Só posso sugerir, você usa rsync. É um padrão do setor, ao mover arquivos através de conexões seguras.
rsync -alPvz ./source_dir server.com:destination_dir
É o que venho usando há anos.
(a -aopção cuida de coisas como recursão de diretório)
-a= recursão + manter links simbólicos, permissões, tempos de modificação, proprietário, grupo, arquivos especiais e arquivos de dispositivos (o último requer privilégios de superusuário); -l= manter links simbólicos (já incluídos -a); -P= mostra o progresso durante a transferência + mantém arquivos parcialmente transferidos; -v= modo detalhado (no entanto, parece obrigatório quando usado -Ppara evitar um erro estranho (bug?) protocol version mismatch); -z= habilita a compactação dos dados transferidos.
-lswitch deve ou não ser usado. Lembro-me de versões mais antigas não incluiu -lno -a.
Você também pode usar o uso scp. O formato geral é
scp -rp sourceDirName username@server:destDirName
scpsignifica "cópia segura". As bandeiras são
-r recursão em subdiretórios-p preservar os tempos de modificaçãoEu acredito que o restante dos itens é auto-explicativo
Se rsyncnão for uma opção, eu recomendaria a seguir lftp:
lftp sftp://user@host.com/path/path/
Em seguida, use o mirrorcomando para fazer upload recursivamente, assim:
mirror -R
(Observe que a recursão é o padrão. O inverso-R é o de fazer o upload do comando mirror em vez de fazer o download. Tente adicionar para fazer uma avaliação para garantir que está fazendo o que você espera.)--dry-run
Ou fazer upload sem recursão:
mirror --no-recursion
Você precisa cdentrar nos diretórios que deseja espelhar. Funciona bem!
Se você puder, use sshfs . É um sistema de arquivos FUSE , disponível nas organizações mais modernas, e funciona com qualquer servidor SFTP. Este é um sistema de arquivos remoto: permite manipular arquivos remotos (através do protocolo SFTP) com os utilitários usuais.
mkdir /mount/point
sshfs server.example.com:/remote/path /mount/point
ls /mount/point
cp -Rp /mount/point/somedir /local/location
fusemount -d /mount/point
É um pouco complicado, mas o que funciona para mim é:
sshpara fazer login na máquina remotasftpda máquina remota para a sua máquina localgetcomando com a -ropção de mover o diretório e todos os seus arquivos.sftp> get -r data /opt/bin get: Invalid flag -r
Se a sua pergunta é realmente 'como uso o sftp para transferir um diretório', então
sftp -r user@server
Mas se você estiver transferindo um diretório, sugiro duas opções melhores, dependendo de suas necessidades. sftprequer o login no servidor remoto em um prompt de comando do tipo ssh, mas se tudo o que você deseja é o (s) arquivo (s), existem maneiras mais fáceis e rápidas.
Scp
Para uma transferência única, faça o upload, tente:
# upload source directory to remote server
scp -rp source_dir user@server:dest
#download directory from remote server:
scp -rp user@server:source_dir dest
#specifying ssh key:
scp -rp -i ~/.ssh/key user@server:source_dir dest
#remote directory has spaces
scp -rp -i ~/.ssh/key user@server:"source\\ dir" dest
Rsync
Se você planeja sincronizar os diretórios regularmente, usar o rsync faz mais sentido. Ele realiza deltas entre os dois diretórios, economizando tempo de transferência e dados através da conexão.
rsync -r -a -v -e ssh --delete source_dir user@server:dest
Aqui está uma lista de algumas das opções mais comuns do rsync: ( extraídas daqui )
Espero que ajude!
você pode ir do servidor para o caminho local
scp -rp user@server:directoryname(full path) .