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


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/


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


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.


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/*

1

Puede diferenciar los 2 directorios.

diff -r dir1 dir2

le mostrará la lista de archivos que se diferencian

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.