Habiendo migrado a Linux desde Windows, me gustaría encontrar un software alternativo a Winmerge o más bien aprender herramientas de línea de comandos para comparar y sincronizar dos carpetas en Linux. Le agradecería que me dijera cómo realizar las siguientes tareas en la línea de comandos ... (He estudiado diff y rsync, pero aún necesito ayuda).
Tenemos dos carpetas: "/ home / user / A" y "/ home / user / B"
La carpeta A es el lugar donde se guardan los archivos y carpetas normales y la carpeta B es una carpeta de respaldo que sirve como un espejo completo de la carpeta A. (El usuario no guarda o modifica directamente nada en la carpeta B.)
Mis preguntas son:
¿Cómo enumerar los archivos que existen solo en la carpeta B? (Por ejemplo, los borrados de la carpeta A desde la última sincronización).
¿Cómo copiar archivos que existen solo en la carpeta B en la carpeta A?
¿Cómo enumerar los archivos que existen en ambas carpetas pero que tienen diferentes marcas de tiempo o tamaños? (Los que se han modificado en la carpeta A desde la última sincronización. Me gustaría evitar el uso de sumas de verificación, porque hay decenas de miles de archivos y el proceso sería demasiado lento).
¿Cómo hacer una copia exacta de la carpeta A en la carpeta B? Quiero decir, copie todo de la carpeta A a la carpeta B que existe solo en la carpeta A y elimine todo de la carpeta B que exista solo en la carpeta B, pero sin tocar los archivos que son iguales en ambas carpetas.
fuente

Respuestas:
Esto pone la carpeta A en la carpeta B:
Si desea que el contenido de las carpetas A y B sea el mismo, coloque
/home/user/A/(con la barra inclinada) como fuente. Esto no toma la carpeta A sino todo su contenido y lo coloca en la carpeta B. De esta manera:-aRealice la sincronización conservando todos los atributos del sistema de archivos-vcorre verbosely-usolo copie archivos con un tiempo de modificación más reciente (o diferencia de tamaño si los tiempos son iguales)--deleteeliminar los archivos en la carpeta de destino que no existen en la fuentePágina de manual: https://download.samba.org/pub/rsync/rsync.html
fuente
/home/user/B/Alugar de sobrescribir el contenido de A al contenido de B. ¿Podrías ayudarme a echarle un vistazo?Podrías
unisondesarrollar una herramienta desarrollada por Benjamin Pierce en U Penn.Supongamos que tiene dos directorios,
/home/user/Documents/dirA/y/home/user/Documents/dirB/Para sincronizar estos dos, puede usar:
~ $
unison -ui text /home/user/Documents/dirA/ /home/user/Documents/dirB/En la salida,
unisonse mostrarán todos y cada uno de los directorios y archivos que sean diferentes en los dos directorios que solicitó sincronizar. Se recomendará sincronizar aditivamente (replicar el archivo faltante en ambas ubicaciones) en la ejecución inicial, luego crear y mantener un árbol de sincronización en su máquina, y en las ejecuciones posteriores implementará una sincronización verdadera (es decir, si elimina un archivo.../dirA, también se eliminará.../dirB. También puede comparar todos y cada uno de los cambios y, opcionalmente, elegir sincronizar hacia adelante o hacia atrás entre los dos directorios.Opcionalmente, para iniciar la interfaz gráfica, simplemente elimine la
-ui textopción de su comando, aunque considero que esclimás simple y rápido de usar.Más sobre esto: Tutorial de Unison en la documentación de usuario de Unison .
fuente
La respuesta de TuxForLife es bastante buena, pero le sugiero encarecidamente que la use
-cal sincronizar localmente. Puede argumentar que no vale la pena el tiempo / la penalización de la red para realizar sincronizaciones remotas, pero vale la pena para los archivos locales porque la velocidad es muy grande.Esto muestra cómo tener el mismo tamaño y marcas de tiempo puede fallarle.
La puesta en marcha
El rsync que no copia nada porque todos los archivos tienen el mismo tamaño y marca de tiempo
El rsync que funciona correctamente porque compara sumas de verificación
fuente
Esto es lo que estoy usando para hacer copias de seguridad de archivos personales, donde no me importa todo lo que cubre
-a, y quiero que se imprima más información útil.Desde la página de manual de rsync :
De
rsync --info=helpAunque menos explícito, esto es aparentemente equivalente y más corto:
fuente
Esto no es completamente lo mismo que pide, pero podría considerar usar una herramienta de control de versiones. Las herramientas como Git hacen todo lo que pides y más, especialmente si no trabajas directamente en la carpeta B, podría ser interesante echarle un vistazo. puedes encontrar más información sobre git aquí
fuente
Puedes usarlo de esta manera:
De esta manera, copiará el contenido de la carpeta A en la carpeta B, no el contenido de la carpeta A en sí.
fuente