ti-enxame.com

O scp pode copiar diretórios recursivamente?

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

610
kernel

Sim, use -r:

scp -rp sourcedirectory [email protected]:/path
  • -r significa recursivo
  • -p preserva os tempos de modificação, os tempos de acesso e os modos do arquivo original.

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

981
dmourati

Embora as respostas anteriores estejam tecnicamente corretas, considere também usar rsync . rsync compara os dados nos lados de envio e recebimento com um mecanismo diff para que ele não precise 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 rsync toda vez, porque ele tem mais controles para coisas como copiar permissões e propriedade de arquivos e excluir certos 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 sempre.

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

Finalmente, as versões modernas de rsync, por padrão, são executadas sobre o ssh, portanto, se scp já está funcionando, rsync deve ser um substituto.

177
Phil Hollenback

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

Veja página de manual do scp para obter mais informações, se necessário.

34
HedgeMage

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
12
Tarun

A melhor maneira é usar o rsync sobre SSH

rsync -a -essh /source/ [email protected]:/dest/

rsync -a -essh [email protected]:/source/ /dest/

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

  • -a: modo de arquivamento (inclui muitas opções comuns padrão, incluindo preservação de links simbólicos)
  • -z: comprimir
  • -v: detalhado: mostra arquivos
  • -P: mostra o progresso como arquivos concluídos/arquivos restantes
  • -e ssh: faz o rsync no protocolo ssh
  • --delete: exclui arquivos no destino que não estão mais na origem
7
mick

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 [email protected]:/directory
ssh [email protected]
remote$ tar -xzvf local.tar.gz

Espero que isto ajude

4
user9869932

Você pode copiar recursivamente um diretório em 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ê corre:

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 em domain.com para ~/destination/log no seu sistema:

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

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

2
Anubioz

Se você preferir passar a senha do usuário como parâmetro, em vez de inseri-la interativamente, poderá usar sshpass (Sudo apt-get install -y sshpass).

Exemplo:

sshpass -p 'remote_password' scp -rp /src/folder [email protected]:/dest/folder
1
Franck Dernoncourt

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 tutorial do comando scp . A opção -r significa operação recursiva na maioria dos comandos do Linux.

0
atthik