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:-a
Realice la sincronización conservando todos los atributos del sistema de archivos-v
corre verbosely-u
solo copie archivos con un tiempo de modificación más reciente (o diferencia de tamaño si los tiempos son iguales)--delete
eliminar 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/A
lugar de sobrescribir el contenido de A al contenido de B. ¿Podrías ayudarme a echarle un vistazo?Podrías
unison
desarrollar 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,
unison
se 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 text
opción de su comando, aunque considero que escli
má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
-c
al 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=help
Aunque 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