Como copiar um diretório inteiro para um diretório com o mesmo nome sem substituir o conteúdo no diretório de destino? (em vez disso, eu gostaria de adicionar ao conteúdo da pasta de destino)
ssh
rsync
scp
synchronization
Daniel Böhmer
fonte
fonte
Respostas:
Use
rsync
e passe-u
se desejar atualizar apenas os arquivos mais recentes no diretório original ou--ignore-existing
ignorar todos os arquivos que já existem no destino.(Observe o
/
lado da fonte: sem elersync
criaria/remote/directory/directory
.)fonte
--ignore-existing
adiciona sem substituir, que perda de dados você vê?rsync
disponível com facilidade .... (Como Win32-OpenSSH)--rsync-path
é necessária)O scp substituirá os arquivos se você tiver permissões de gravação para eles.
Em outras palavras: você pode
scp
efetivamente pular esses arquivos removendo temporariamente as permissões de gravação neles (se você é o proprietário dos arquivos).fonte
scp -r [email protected]:/location/of/files/* /local/location/
Você pode copiar apenas novos arquivos por data. Usar
find
fonte
Se você pode tornar o conteúdo do arquivo de destino somente leitura:
antes de executar
scp
(ele irá reclamar e pular os arquivos existentes).E altere-os novamente depois (
chmod +w
para obter um valor baseado em umask). Se nem todos os arquivos tiverem permissão de gravação de acordo com o umask, você precisará armazenar as permissões para poder restaurá-las.(A resposta de Gilles substitui os arquivos existentes, se eles forem mais novos localmente, perdi dados valiosos dessa maneira. Não entendo por que essa resposta errada e prejudicial tem tantos votos positivos).
fonte
rsync --ignore-existing
você perdeu dados?find: missing argument to '-exec'
de utilizar este comando, e em vez teve de usar:find . -type f -exec chmod a-w {} \;
. Meu linux está ruim, sim.find . -type f -exec chmod a-w {} \;
Eu tinha uma tarefa semelhante, no meu caso eu não poderia usar
rsync
,csync
ou FUSE porque meu armazenamento tem apenas SFTP.rsync
não foi possível alterar a data e a hora do arquivo, alguns outros utilitários (comocsync
) me mostraram outros erros: " Não foi possível criar o arquivo temporário A inclinação do relógio foi detectada ".Se você tiver acesso ao servidor de armazenamento - basta instalar
openssh-server
ou iniciarrsync
como um daemon aqui.No meu caso - não pude fazer isso e a solução foi: lftp .
lftp
O uso da sincronização está abaixo:/src/folder
- é a pasta no meu PC,/rem/folder
- ésftp://sft.domain.tld/rem/folder
.Você pode encontrar as páginas de manual no link: http://lftp.yar.ru/lftp-man.html
fonte
Para copiar um monte de arquivos, é mais rápido tar. Ao usar -k, você também evita que o tar substitua arquivos ao descompactá-lo no sistema de destino.
fonte
scp
sobrescreve arquivos e não há como impedir que isso seja feito, mas você pode copiar as coisas do caminho, fazer o scp e depois copiar os arquivos existentes novamente. Exemplos:Copie todos os arquivos existentes do caminho
Copie tudo usando scp
Copie os arquivos originais sobre qualquer coisa que o scp tenha escrito:
fonte
Outra maneira de conseguir isso é fazer um
ls
na pasta de destino:Na pasta de destino remoto:
Na fonte:
No destino:
fonte
-
>
nova linha de espaço ou outros caracteres especiais. 3. Codifique um loop for em um script python. Gerar um programa em tempo de execução é difícil e complicado (mesmo quando feito por programadores profissionais), por várias razões. Gerar um script de shell é ainda pior - uma péssima idéia.