Respostas:
sftp
, like cp
e 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 -r
opção
Então, adicione -r
ao comando.
-r
ao sftp
comando 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 -a
opçã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 -P
para evitar um erro estranho (bug?) protocol version mismatch
); -z
= habilita a compactação dos dados transferidos.
-l
switch deve ou não ser usado. Lembro-me de versões mais antigas não incluiu -l
no -a
.
Você também pode usar o uso scp
. O formato geral é
scp -rp sourceDirName username@server:destDirName
scp
significa "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 rsync
não for uma opção, eu recomendaria a seguir lftp
:
lftp sftp://user@host.com/path/path/
Em seguida, use o mirror
comando 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 cd
entrar 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 é:
ssh
para fazer login na máquina remotasftp
da máquina remota para a sua máquina localget
comando com a -r
opçã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. sftp
requer 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) .