Tengo dos copias de una carpeta
src/
dest/
Quiero fusionarlos, haciendo lo siguiente:
Si solo hay un archivo src
, quiero que se mueva adest
Si solo hay un archivo dest
, quiero que se ignore IE solo.
Si un archivo está en ambos y tiene contenido idéntico (es decir, el mismo tamaño y fecha), elimine desrc
Si un archivo está en ambos y no tiene contenido idéntico, déjelo atrás src
para que pueda combinarlos manualmente.
Solo un número muy pequeño de archivos (entre 0% y 5% del total de archivos) debe estar en esta última categoría, pero no sé cómo separar el archivo en ambos y el mismo de ambos, pero diferente.
He intentado descubrir cómo hacer esto, rsync
pero fue en vano hasta ahora.
for file in `find src/ -type f`; do diff $file `echo $file | sed 's/src/dest/'` && rm $file || echo $file; done
(puede omitirlo|| echo $file
si lo desea, está incluido para completar)\?*[
, iniciales-
). Debe usar comillas dobles alrededor de sustituciones variables , pasar--
a utilidades antes de los nombres de archivo, usar enfind … -exec …
lugar de analizar la salida defind
. Con unrm
comando en la mezcla, esta es una receta para el desastre.Unison es la herramienta que estás buscando. Prueba unison-gtk si prefieres una interfaz gráfica de usuario. Pero no creo que elimine archivos similares: intente al unísono que ambos directorios sean idénticos. Sin embargo, fácilmente 1) identificará qué archivos se copiarán; 2) cuáles necesitan fusión manual.
fuente
El siguiente script debería hacer las cosas razonablemente. Mueve los archivos desde el origen al destino, nunca sobrescribe un archivo y crea directorios según sea necesario. Los archivos de origen que tienen un archivo diferente correspondiente en el destino se dejan solos, al igual que los archivos que no son archivos o directorios normales (por ejemplo, enlaces simbólicos). Los archivos que quedan en la fuente son aquellos por los cuales existe un conflicto. Cuidado, no lo he probado en absoluto.
Otro enfoque sería hacer una unión montando un directorio sobre el otro, por ejemplo con funionfs o unionfs-fuse .
fuente