Como posso obter o comando scp para substituir a pasta de destino

39

Estou usando o comando scp para copiar alguns arquivos para um PC remoto, como você faz com o scp :)

Observo que o comportamento padrão de uma cópia scp para arquivos é substituir os arquivos existentes. Agora eu quero copiar uma pasta para fazer basicamente a mesma coisa:

scp -r <source_path> user@myOtherPc:<dest_path>

Onde as partes em <> são os caminhos da minha pasta. No entanto, quando executo isso, recebo a mensagem "o arquivo existe". Existe uma maneira de contornar isso? algum tipo de força sobre-escrita?

Obrigado, forragem

code_fodder
fonte
2
Você poderia dar alguns exemplos de caminho? Não reproduzo isso no meu sistema. Além disso, você verificou as permissões de arquivo?
Levans
Ele fornece informações úteis se você usar o modo detalhado? -v. Além disso, você está usando um caminho absoluto ou relativo no lado do destino? Eu acho que se a pasta de destino já existir, ele vai criar o caminho de origem dentro da pasta de destino, em vez de substituir ( testdir/testdir)
Beroe
2
É estranho que você entenda isso. Supostamente scp não tem noclobber ...
Beroe
11
@ Levans Eu não verifiquei as permissões, acabei de dar uma olhada e acho que você pode estar certo. Apaguei tudo na área de destino e comecei novamente usando apenas o comando "scp" e usando o usuário "root" e consegui copiar os arquivos / pastas várias vezes :) ... Não tenho 100% de certeza sobre o problema de permissão que eu tinha, mas agora eu tenho uma "alça" sobre o assunto eu provavelmente pode descobrir isso, graças
code_fodder
11
@beroe Sim, isso é o que eu pensei também ... isso me confundiu, mas acho que cometi algum tipo de erro de usuário aqui com as permissões, ainda não sou especialista em linux :( Mas vou tentar o verbose-ness próxima vez que eu tiver um problema como esse para obter mais informações, graças também tenho notado que, às vezes você começa a "pasta de dentro para a pasta" acontecendo ... mas isso é outra questão: o.
code_fodder

Respostas:

25

Como dito anteriormente, o scp substitui alegremente qualquer arquivo que já esteja presente.

O problema "o arquivo existe" pode ocorrer somente quando você tiver algum outro processo (como um processo scp simultâneo ou outra coisa) escrevendo pastas e arquivos no mesmo destino. Considere usar o rsync.

nicolasochem
fonte
11
Gostaria apenas de acrescentar: ... desde que você tenha acesso de gravação a esse arquivo ... #
SDsolar
mas para pastas, ela mescla ou substitui a pasta?
Dr_Hope 29/08
5

Como Levans, não consegui replicar isso, mas você já pensou em usar o rsync over ssh? Se você estiver copiando um grande número de arquivos, o rsync pode ser uma opção melhor que o scp. Existem vários bons guias on-line, como estes:

http://troy.jdmz.net/rsync/index.html https://calomel.org/rsync_tips.html

Esse primeiro link lida com backups automatizados via cron, portanto, algumas das instruções (como criar uma chave ssh sem uma senha) podem não ser relevantes para você.

Ben
fonte
Interessante, eu não sabia que você pode usar o rsync dessa maneira ... apenas dei uma olhada rápida na página de manual e parece que você pode usá-lo de uma maneira muito semelhante ao scp com <source_path> e <user @ host: dest_path> parâmetros. Não estou 100% de certeza que é o que eu quero desde que eu quero copiar / substituir, sem cuidar o estado do que está no dest, mas ainda uma boa idéia :) sempre
code_fodder
Sim, pode valer a pena jogar, porque ele deve copiar o arquivo se ele tiver sido alterado (ou a parte do arquivo que foi alterada, preciso verificar novamente e estou um pouco cansado demais) agora).
21413 Ben
haha .... não se preocupe com verificando-lo, eu posso fazer essas coisas ... mas obrigado pela informação :)
code_fodder
Ah, legal, eu posso parar de olhar os palitos de fósforo como um meio de sustentar minhas pálpebras. ;)
Ben
11
Isso pode funcionar, mas é um pouco como usar uma marreta para golpear uma mosca. ;-)
SDsolar
3

Você receberá essa mensagem de erro se o diretório de destino já contiver um arquivo com o mesmo nome que o diretório de origem que você está tentando transferir. Você não pode ter um arquivo com o mesmo nome que um diretório no mesmo diretório.

EvR2f
fonte