Pode scp copiar diretórios recursivamente?

528

Atualmente, só posso copiar um único arquivo .tar . Mas como posso copiar diretórios recursivamente com scp ?

    
por kernel 29.04.2011 / 06:24

9 respostas

856

Sim, use -r :

scp -rp sourcedirectory user@dest:/path
  • -r significa recursivo
  • -p preserva tempos de modificação, tempos de acesso e modos do arquivo original.

Nota: Isso cria o sourcedirectory dentro de /path , portanto, os arquivos estarão em /path/sourcedirectory

    
por 29.04.2011 / 06:28
151

Embora as respostas anteriores estejam tecnicamente corretas, você também deve considerar o uso de rsync . rsync compara os dados nos lados de envio e recebimento com um mecanismo de comparação, para que não precise reenviar os 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 rsync todas as vezes, 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 scp e copiar tudo o tempo todo.

Além disso, rsync permite que você se recupere de transferências interrompidas com muita facilidade, ao contrário de scp .

Por fim, as versões modernas de rsync , por padrão, são executadas sobre ssh, portanto, se scp já estiver funcionando, rsync deve ser uma substituição imediata.

    
por 29.04.2011 / 07:11
31

É para isso que serve a opção -r . :)

Veja a página man scp para mais informações, se necessário.

    
por 29.04.2011 / 06:27
9

Opção de Cópia Recursiva '-r' (minúscula)

scp -r

Que eu confundo com a opção de cópia recursiva local regular '-R' (maiúsculo)

cp -R
    
por 11.09.2013 / 19:53
4

A melhor maneira é usar o rsync via SSH

rsync -a -essh /source/ user@dest-server:/dest/

rsync -a -essh user@source-server:/source/ /dest/

Minhas opções favoritas são -Pazvessh --delete:

  • -a: modo de arquivamento (inclui muitas opções comuns padrão, incluindo a preservação de links simbólicos)
  • -z: comprimir
  • -v: verbose: arquivos de exibição
  • -P: mostra o progresso como arquivos executados / arquivos restantes
  • -e ssh: do rsync no protocolo ssh
  • - delete: exclua os arquivos no destino que não estão mais na origem
por 05.11.2015 / 19:33
3

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 é que você está copiando (recursivamente) um diretório. Talvez, se os arquivos forem enviados comprimidos, você economize 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 isso ajude

    
por 06.06.2015 / 20:00
1

Você pode recursivamente copiar um diretório para um arquivo compactado com este comando simples:

ssh -p 22 [email protected]  'cd /parent/directory && tar zcvf - directory_to_copy' > /destination/on/your/machine/archive_name.tgz

Por exemplo, para copiar o conteúdo de /var/log de domain.com para ~/logs.tgz você executa:

ssh -p 22 [email protected]  '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/log at domain.com para ~/destination/log em seu sistema:

ssh -p 22 [email protected]  'cd /var && tar zcvf - log' | tar xzf - -C ~/destination

Apesar de espelhar um diretório, você provavelmente deveria usar rsync ...

    
por 06.01.2016 / 08:20
0

Se você preferir passar a senha do usuário como um parâmetro em vez de inseri-la de forma interativa, use sshpass ( sudo apt-get install -y sshpass ).

Exemplo:

sshpass -p 'remote_password' scp -rp /src/folder [email protected]:/dest/folder
    
por 06.01.2016 / 07:49
-2

Outra opção (provavelmente melhor para uso repetido) é usar o NFS - confira nfs-kernel-server e como configurar compartilhamentos NFS.

    
por 12.08.2016 / 00:08