Como posso copiar um diretório (grande) sobre outro alterando apenas os arquivos que diferem?


14

Eu tenho o diretório ae o diretório b. Eles são grandes. b é quase idêntico a a. "quase" significa que 4-5 arquivos diferem, e eu não sei quais são. Quero copiar b sobre a, mas apenas os arquivos que diferem. estou na festa.

(não, não posso simplesmente excluir a e substituí-lo por b, porque 1) a é controlado por versão 2) uma cópia completa (ou um mv) exigiria muito. Quero copiar apenas os arquivos que diferem).


É rsyncuma opção?
Bobby

É, mas eu não sei muito sobre rsync.
janesconference

Respostas:


17

Você pode usar rsyncpara fazer isso, o comando que eu uso érsync -tr "folder to copy from" "folder to copy to"

por exemplo rsync -tr /home/me/stuff/* /home/me/otherstuff/


1
Cuidado com este comando. Ele excluirá todos os arquivos que não serão diferentes. Eu corri e perdi quase tudo !!
Arvind K.

@ Arvind Eu não sei qual comando você usou que causou a perda de seus dados, mas não foi o rsync -tr. Leia a página do manual.
Tog

18

Também é possível fazer isso com bons velhos tempos cp:

Obrigado ao srcspider por me lembrar de usar -T!

cp -ruT old-dir new-dir


+1 Eu me acostumei a sincronizar máquinas e esqueço as maneiras elegantes.
Tog

não funciona para mim :(
janesconference

Isso é realmente bom gnu cp. ;-)
Keith

1
No OS X, a opção -u não existe. Simplesmente usei cp -r old-dir new-dir, pois não precisava comparar datas.
Jean-François Beauchamp

Não funciona. Não tenho certeza se isso é alguma convenção de nome, mas cp -ru pasta-A pasta-B simplesmente copia a pasta-A dentro da pasta -B não copia o conteúdo de A dentro de B e sobrescreve, o que seria o efeito desejado.
21813 srrspider

1

Outra boa opção é o Unison ( http://www.cis.upenn.edu/~bcpierce/unison/ ), principalmente se não houver realmente uma "fonte" e um "destino". Cada diretório é uma raiz e o Unison os sincroniza e mantém os metadados para futuras sincronizações. Ele oferece uma opção de linha de comando e de GUI que também pode ser agendada facilmente via cron.

Eu o uso para fazer um backup do meu Dropbox no meu dispositivo NAS local, que não pode executar um cliente Dropbox.


1

PODE ser feito com um bom ol 'cp, embora com um formato ligeiramente diferente do indicado acima. Aqui está como eu fiz isso:

cp -ru --target-directory="destination_path" source_path/*

1

Você pode diferenciar os 2 diretórios.

diff -r dir1 dir2

mostrará a lista de arquivos differnet

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.