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).

janesconference
fonte
É 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/

Tog
fonte
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

new123456
fonte
+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.

Digitalcraig
fonte
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/*
Sven Croon
fonte
1

Você pode diferenciar os 2 diretórios.

diff -r dir1 dir2

mostrará a lista de arquivos differnet

Oleg
fonte