Respostas:
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 o rsync
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:
$ 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 recuperar de transferências interrompidas com muita facilidade, ao contrário scp
.
Finalmente, as versões modernas de, rsync
por padrão, executam o ssh, portanto, se scp
já estiver funcionando, rsync
deve ser um substituto.
rsync
é mais eficiente. Uma coisa que atualmente não scp
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.
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:
rsync
que usei usariam ssh
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:
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.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:
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/log
de domain.com
para ~/logs.tgz
você 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/log
at domain.com
para ~/destination/log
no 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.
-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.
scp
mas o NFS não é uma opção.