Atualmente, só posso copiar um único .tar
arquivo. Mas como posso copiar diretórios recursivamente scp
?
573
Sim, use -r
:
scp -rp sourcedirectory user@dest:/path
Nota: Isso cria o sourcedirectory
interior, /path
assim 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
.rsync
compara 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 orsync
tempo 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: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 recuperar de transferências interrompidas com muita facilidade, ao contrárioscp
.Finalmente, as versões modernas de,
rsync
por padrão, executam o ssh, portanto, sescp
já estiver funcionando,rsync
deve ser um substituto.fonte
rsync
é mais eficiente. Uma coisa que atualmente nãoscp
faz é 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
-r
opção. :)Consulte a página do manual scp para obter mais informações, se necessário.
fonte
Opção de cópia recursiva '-r' (minúscula)
O que confundo com a opção de cópia recursiva local regular '-R' (maiúscula)
fonte
A melhor maneira é usar o rsync sobre SSH
Minhas opções de favoritos são -Pazvessh --delete:
fonte
rsync
que usei usariamssh
por 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:
Espero que isto ajude
fonte
.tar.gz
ou.tgz
uma vez que o arquivo é um arquivo tar compactado com gzip (desde que o-z
sinalizador seja usado).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ê executar:Você também pode extrair arquivos no sistema de destino usando pipes. Este comando copiará o conteúdo de
/var/log
atdomain.com
para~/destination/log
no seu sistema:Embora espelhe um diretório, você provavelmente deve usar
rsync
...fonte
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:
fonte
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.
fonte
-r
opçã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.
fonte
scp
mas o NFS não é uma opção.