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

14

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

(não, eu não posso simplesmente deletar a e substituí-la por b, porque 1) a é controlado por versão 2) uma cópia completa (ou um mv) levaria muito. Eu quero copiar apenas os arquivos que diferem).

    
por janesconference 03.02.2011 / 12:42

5 respostas

14

Você pode usar rsync para 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/

    
por 03.02.2011 / 12:49
17

Também é possível fazer isso com o bom e velho cp :

Obrigado ao srcspider por me lembrar de usar -T !

cp -ruT old-dir new-dir

    
por 03.02.2011 / 12:57
1

Outra boa opção é o Unison ( link ), especialmente se não houver realmente uma "fonte "e um" destino ". Cada diretório é uma raiz e o Unison sincroniza-os e mantém metadados para futuras sincronizações. Ele oferece uma opção de linha de comando e uma GUI que podem ser facilmente programadas via cron também.

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

    
por 03.02.2011 / 15:18
1

Pode ser feito com bom e velho cp, embora com um formato ligeiramente diferente do que foi mencionado acima. Aqui está como eu fiz:

cp -ru --target-directory="destination_path" source_path/*
    
por 29.08.2013 / 15:56
1

Você pode diferenciar os dois diretórios.

diff -r dir1 dir2

mostrará a lista de arquivos que são diferentes

    
por 18.06.2014 / 19:31