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