¿Cómo puedo copiar un directorio (grande) sobre otro cambiando solo los archivos que difieren?

14

Tengo el directorio a y el directorio b. Ellos son grandes. b es casi idéntico a a. "casi" significa que 4-5 archivos difieren, y no sé cuáles son. Quiero copiar b sobre a, pero solo los archivos que difieren. Estoy en fiesta.

(no, no puedo simplemente eliminar a y reemplazarlo por b, porque 1) a está controlado por la versión 2) una copia completa (o un mv) tomaría demasiado. Quiero copiar solo los archivos que difieren).

janesconference
fuente
Es rsyncuna opcion?
Bobby
Lo es, pero no sé mucho sobre rsync.
janesconference

Respuestas:

17

Puedes usar rsyncpara hacer esto, el comando que uso esrsync -tr "folder to copy from" "folder to copy to"

p.ej rsync -tr /home/me/stuff/* /home/me/otherstuff/

Ataviarse
fuente
1
CUIDADO con este comando. Eliminará todos los archivos que no difieran. Lo corrí y PERDÍ casi todo !!
Arvind K.
@Arvind No sé qué comando usaste que te hizo perder tus datos, pero no fue rsync -tr. Lee la página del manual.
Tog
18

También es posible hacer esto con buenos viejos cp:

¡Gracias a srcspider por recordarme que use -T!

cp -ruT old-dir new-dir

nuevo123456
fuente
Me acostumbro tanto a sincronizar entre máquinas que olvido las formas elegantes.
Tog
no funciona para mí :(
janesconference
Eso es realmente bueno gnu cp. ;-)
Keith
1
En OS X, la opción -u no existe. Simplemente utilicé cp -r old-dir new-dir, ya que no tuve que comparar fechas.
Jean-François Beauchamp
No funciona. No estoy seguro de si esto es una convención de nombres, pero cp -ru carpeta-A carpeta-B simplemente copiará la carpeta-A dentro de la carpeta-B no copiará el contenido de A dentro de B y sobrescribirá, lo que sería el efecto deseado.
srcspider
1

Otra buena opción es Unison ( http://www.cis.upenn.edu/~bcpierce/unison/ ), particularmente si realmente no hay una "fuente" y un "destino". Cada directorio es una raíz y Unison los sincroniza y mantiene los metadatos para futuras sincronizaciones. Ofrece tanto una línea de comandos como una opción de GUI que también se puede programar fácilmente a través de cron.

Lo uso para hacer una copia de seguridad de mi Dropbox en mi dispositivo NAS local que no puede ejecutar un cliente de Dropbox.

Digitalcraig
fuente
1

Se PUEDE hacer con buen ol 'cp, aunque con un formato ligeramente diferente al indicado anteriormente. Así es como lo hice:

cp -ru --target-directory="destination_path" source_path/*
Sven Croon
fuente
1

Puede diferenciar los 2 directorios.

diff -r dir1 dir2

le mostrará la lista de archivos que se diferencian

Oleg
fuente