Tienes tres carpetas:
- carpeta actual , que contiene sus archivos actuales
- carpeta antigua , que contiene una versión anterior de los mismos archivos
- diferencia de carpeta , que es solo una carpeta vacía
¿Cómo se compara vieja con la corriente y copiar los archivos que son diferentes (o enteramente nuevo) en la corriente de diferencia ?
He buscado por todos lados y parece algo sencillo de abordar, pero no puedo hacer que funcione en mi ejemplo particular. La mayoría de las fuentes sugirieron el uso de rsync, así que terminé con el siguiente comando:
rsync -ac --compare-dest=../old/ new/ difference/
Sin embargo, lo que esto hace es copiar todos los archivos de nuevo a diferencia , incluso aquellos que son los mismos que en el anterior .
En caso de que ayude (tal vez el comando está bien y la falla se encuentra en otro lugar), así es como probé esto:
- Hice las tres carpetas.
- Hice varios archivos de texto con diferentes contenidos en la antigüedad .
- Copié los archivos de viejo a nuevo .
- Cambié el contenido de algunos de los archivos en nuevo y agregué algunos archivos adicionales.
- Ejecuté el comando anterior y verifiqué los resultados en diferencia .
He estado buscando una solución durante los últimos días y realmente agradecería algo de ayuda. No necesariamente tiene que estar usando rsync, pero me gustaría saber qué estoy haciendo mal si es posible.
Respuestas:
No estoy seguro de si puede hacerlo con cualquier comando de Linux existente como rsync o diff. Pero en mi caso tuve que escribir mi propio script usando Python, ya que python tiene el módulo "filecmp" para la comparación de archivos. He publicado todo el script y el uso en mi sitio personal: http://linuxfreelancer.com/
Su uso es simple: déle la ruta absoluta del nuevo directorio, el directorio antiguo y el directorio de diferencias en ese orden.
fuente
He descubierto cuál era el problema en mi caso:
Los archivos que estaba comparando tenían diferentes marcas de tiempo. Supongo que no debería haber usado el argumento -a porque rsync estaba tratando de preservar las marcas de tiempo al copiar archivos. El comando que funcionó para mí fue:
fuente
rsync -a
para "copiar" los archivos inicialmente (o el equivalente de cp), luego eliminarlos o modificarlos. (Me gusta seguir con rsync porque sé que es coherente sin pensar en lo que podría estar haciendo). Creo que debería haber funcionado con el comando original. La opción -a incluye -t (comparar por marca de tiempo), que es la alternativa a -c (comparar por suma de verificación).old/
ynew/
.Esto podría ayudar a algunos lectores: en Windows, un pequeño y antiguo programa gratuito, Third Dir, hace exactamente lo que se pide aquí. Ya no está disponible a través del desarrollador, Robert Vašíček. Pero estoy seguro de que se puede encontrar a través de algunos repositorios en línea.
Aquí está la descripción del desarrollador, que permanece en su sitio:
Tercer directorio: un sincronizador de directorio inusual: los diferentes archivos se copian en el tercer directorio. Es muy útil extraer, por ejemplo, fotos nuevas o editadas de un gran árbol de directorios en un disco fijo a una carpeta temporal, luego agregarlas al CD de archivo (nota: los archivos originales se comparan con el CD). Versión 1.4, tamaño 23kB. Creado 2005-02-12.
Historia: Versión 1.14: más eficiente cuando se comparan muchos decenas de miles de archivos.
fuente
La forma rsync dada por Thane con las adiciones de Yamaneko funciona muy bien pero deja directorios vacíos. Para mí, la solución final fue en dos pasos, primero llamar a rsync con la ruta completa, luego un comando de búsqueda para eliminar todos los directorios vacíos:
Tenga en cuenta que incluso con la opción --links, rsync no mantuvo enlaces simbólicos, sino que copió los datos de destino.
fuente
-empty -exec rmdir {} \;
usted puede usar-empty -delete
.Yo uso el dualpane XY Explorer (comercial), que puede hacer muchos trucos y este es uno de ellos. Abrir
Current
en un panel y Viejo en el otro. Activa el panel Actual. Vaya a Paneles > Selección de sincronización . Te da 5 opciones para seleccionar:Ahora puede copiar la selección resultante desde
Current
donde desee. Lo usé para comparar lasmailfolders
instalaciones antiguas con las más recientes. La estructura de carpetas era bastante compleja, pero (casi) todasmbs-files
tenían un número único.Así que hice una búsqueda
mbs-files
en la raíz anteriormailfolder
(en un panel), así como en la más nueva (en el otro panel) e hice una comparación en los resultados de búsqueda en cada panel ( Sync Select Unique , para encontrar los correos que se perdieron durante reinstala)! También puedes configurar muchas opciones.fuente