¿copia_solo_falta? - Copie de /A a /C sólo las rutas que faltan en /B y /C - forma concisa

¿copia_solo_falta? - Copie de /A a /C sólo las rutas que faltan en /B y /C - forma concisa

Me gustaría copiar de/Aa/Csolo faltan caminos/By/C. (Suponga que son rutas y que también pueden representar ubicaciones remotas, por ejemplo, montadas a través de sshfs)

Me pregunto...¿Existe una forma más concisa que escribir un bucle, iterar sobre el sistema de archivos y realizar comprobaciones, archivo por archivo?

Contenido de ejemplo de directorios de árbol/A,/B,/C:

/A:

/A/1abc/qwe
/A/2abc/asd
/A/3abc/zxc
/A/4abc/rty

/B:

/A/2abc/asd
/A/3abc/zxc

/C:

/C/1abc/qwe

esperado: copiar de/Aa/Cúnico camino 4abc/rty:

/A/4abc/rty -> /C/4abc/rty

Para ilustrar ejemplos prácticos de/A,/B,/C, lo que lleva a tal escenario:

  • haces copia de seguridad, copias de algunos/fuente(/A) Para algo/destino(/B) y algunas rutas no se pudieron copiar. Entonces deseas tener una copia de todos modos de las que faltan. Entonces encuentras/otro_destino(/C) que puede aceptarlos y desea copiar solo los que faltan. A continuación se muestran ejemplos de limitaciones de por qué copiar desde/Aa/Bpodría fallar: el disco se llenó; limitación del sistema de archivos de/B(como la longitud del nombre del archivo), aunque no esté presente en/Csistema de archivos; etc.

Respuesta1

Una solución es hacer unmontaje de uniónde B y C con C como rama de escritura. Entonces el problema se reduce a copiar de A a B+C sólo los archivos que faltan en B+C, lo que se puede hacer con

rsync -a --ignore-existing /A /B+C

Para el montaje de unión, una posibilidad esfusible-unionfs.

unionfs-fuse -o cow /C=RW:/B=RO /B+C

O sindicatos:

mount -t unionfs -o dirs=/C=rw:/B=ro unionfs /B+C 

información relacionada