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 de comparação para não precisar reenviar dados que já foram enviados anteriormente.
Se você for copiar algo para uma máquina remota mais de uma vez, use rsync. Na verdade, é bom usar rsyncsempre porque tem mais controles para coisas como copiar permissões e propriedade de arquivos e excluir certos arquivos ou diretórios. No geral:
$ rsync -av /local/dir/ server:/remote/dir/
irá 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 que você se recupere de transferências interrompidas com muita facilidade, ao contrário do scp.
Finalmente, as versões modernas do rsyncssh são executadas por padrão, portanto, se scpjá estiver funcionando, rsyncdeve ser uma substituição imediata.
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 o caso for que você está copiando (recursivamente) um diretório. Talvez se os arquivos forem enviados compactados você possa 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
Você também pode extrair arquivos no sistema de destino usando pipes. Este comando copiará o conteúdo de /var/logat domain.comto ~/destination/logem seu sistema:
ssh -p 22 [email protected] 'cd /var && tar zcvf - log' | tar xzf - -C ~/destination
Embora para espelhar um diretório, você provavelmente deve usar rsync...
Você pode usar a opção -r com o comando scp para copiar diretórios recursivamente em qualquer sistema. Se 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.
Sim, use
-r
:Nota: Isso cria o
sourcedirectory
interior/path
para que os arquivos fiquem em/path/sourcedirectory
Embora as respostas anteriores estejam tecnicamente corretas, você também deve considerar o uso
rsync
.rsync
compara os dados nos lados de envio e recebimento com um mecanismo de comparação para não precisar reenviar dados que já foram enviados anteriormente.Se você for copiar algo para uma máquina remota mais de uma vez, use
rsync
. Na verdade, é bom usarrsync
sempre porque tem mais controles para coisas como copiar permissões e propriedade de arquivos e excluir certos arquivos ou diretórios. No geral:irá 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
scp
e copiar tudo sempre.Além disso,
rsync
permite que você se recupere de transferências interrompidas com muita facilidade, ao contrário doscp
.Finalmente, as versões modernas do
rsync
ssh são executadas por padrão, portanto, sescp
já estiver funcionando,rsync
deve ser uma substituição imediata.É para isso que serve a
-r
opção. :)Consulte a página de manual do scp para obter mais informações, se necessário.
Opção de cópia recursiva '-r' (minúsculas)
Que eu confundo com a opção de cópia recursiva local regular '-R' (maiúsculas)
A melhor maneira é usar rsync sobre SSH
Minhas opções favoritas são -Pazvessh --delete :
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 o caso for que você está copiando (recursivamente) um diretório. Talvez se os arquivos forem enviados compactados você possa economizar tempo na transferência
O que eu fiz no final foi:
Espero que isto ajude
Você pode copiar recursivamente um diretório em um arquivo compactado com este comando simples:
Por exemplo, para copiar o conteúdo de
/var/log
dedomain.com
para~/logs.tgz
você execute:Você também pode extrair arquivos no sistema de destino usando pipes. Este comando copiará o conteúdo de
/var/log
atdomain.com
to~/destination/log
em seu sistema:Embora para espelhar um diretório, você provavelmente deve usar
rsync
...Se preferir passar a senha do usuário como parâmetro ao invés de inseri-la interativamente, você pode usar
sshpass
(sudo apt-get install -y sshpass
).Exemplo:
Você pode usar a opção -r com o comando scp para copiar diretórios recursivamente em qualquer sistema. Se 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.