Respostas:
Sim, use -r:
scp -rp sourcedirectory user@dest:/path
Nota: Isso cria o sourcedirectoryinterior, /pathassim os arquivos estarão em/path/sourcedirectory
-pr(as opções na ordem inversa) não copiarão as pastas, mas sim o conteúdo no diretório de destino (aparentemente, a ordem das opções é importante).
Embora as respostas anteriores estejam tecnicamente corretas, você também deve considerar o uso rsync. rsynccompara os dados nos lados de envio e recebimento com um mecanismo diff, para que não seja necessário reenviar dados que já foram enviados anteriormente.
Se você deseja copiar algo para uma máquina remota mais de uma vez, use rsync. Na verdade, é bom usar o rsynctempo todo, porque ele tem mais controles para coisas como copiar permissões e propriedade de arquivos e excluir determinados arquivos ou diretórios. Em geral:
$ rsync -av /local/dir/ server:/remote/dir/
sincronizará um diretório local com um diretório remoto. Se você executá-lo uma segunda vez e o conteúdo do diretório local não for alterado, nenhum dado será transferido - muito mais eficiente do que executar scpe copiar tudo sempre.
Além disso, rsyncpermite recuperar de transferências interrompidas com muita facilidade, ao contrário scp.
Finalmente, as versões modernas de, rsyncpor padrão, executam o ssh, portanto, se scpjá estiver funcionando, rsyncdeve ser um substituto.
rsyncé mais eficiente. Uma coisa que atualmente não scpfaz é permitir a cópia entre hosts remotos (pelo menos sem executar o cliente rsync em um deles).
-av: v é para verbose, a para arquivamento e é um atalho para -rlptgoD que implica recursiva, preserva datas e links do proprietário dos direitos. Se você quer apenas uso recursivo-r
É para isso que serve a -ropção. :)
Consulte a página do manual scp para obter mais informações, se necessário.
Opção de cópia recursiva '-r' (minúscula)
scp -r
O que confundo com a opção de cópia recursiva local regular '-R' (maiúscula)
cp -R
A melhor maneira é usar o rsync sobre SSH
rsync -a -essh /source/ user@dest-server:/dest/
rsync -a -essh user@source-server:/source/ /dest/
Minhas opções de favoritos são -Pazvessh --delete:
rsyncque usei usariam sshpor padrão, portanto -esshé improvável que seja necessário. E a escolha do comando usado para conectar-se ao host remoto não tem nenhuma relação com a cópia recursiva.
Depois de procurar o sinalizador de cópia recursiva e usá-lo com sucesso graças a este post, gostaria de postar apenas uma sugestão.
Se for o caso, você está copiando (recursivamente) um diretório. Talvez se os arquivos forem enviados compactados, você poderá economizar tempo na transferência
O que eu fiz no final foi:
local$ tar -czvf local.tar.gz directory/
local$ scp local.tar.gz user@remote:/directory
ssh user@remote
remote$ tar -xzvf local.tar.gz
Espero que isto ajude
.tar.gzou .tgzuma vez que o arquivo é um arquivo tar compactado com gzip (desde que o -zsinalizador seja usado).
Você pode copiar recursivamente um diretório em um arquivo compactado com este comando simples:
ssh -p 22 user@address-to-copy-from.com 'cd /parent/directory && tar zcvf - directory_to_copy' > /destination/on/your/machine/archive_name.tgz
Por exemplo, para copiar o conteúdo de /var/logde domain.compara ~/logs.tgzvocê executar:
ssh -p 22 user@domain.com 'cd /var && tar zcvf - log' > ~/logs.tgz
Você também pode extrair arquivos no sistema de destino usando pipes. Este comando copiará o conteúdo de /var/logat domain.compara ~/destination/logno seu sistema:
ssh -p 22 user@domain.com 'cd /var && tar zcvf - log' | tar xzf - -C ~/destination
Embora espelhe um diretório, você provavelmente deve usar rsync...
Se você preferir passar a senha do usuário como parâmetro, em vez de inseri-la interativamente, use sshpass( sudo apt-get install -y sshpass).
Exemplo:
sshpass -p 'remote_password' scp -rp /src/folder myremoteusername@122.10.12.123:/dest/folder
Você pode usar a opção -r com o comando scp para copiar diretórios recursivamente em qualquer sistema. Se você precisar de mais alguma coisa, consulte o tutorial do comando scp . A opção -r significa operação recursiva na maioria dos comandos do Linux.
-ropção já foi sugerida anos atrás e é a resposta aceita.
Outra opção (provavelmente melhor para uso repetido) é usar o NFS - confira o nfs-kernel-server e como configurar os compartilhamentos NFS.
scpmas o NFS não é uma opção.