sincronizar un archivo en particular de forma recursiva pero solo en los subdirectorios presentes en el destino

sincronizar un archivo en particular de forma recursiva pero solo en los subdirectorios presentes en el destino

Tengo dos directorios dirOrigy dirDesten diferentes servidores remotos. Ambos tienen numerosos subdirectorios en distintas profundidades. Ahora necesito copiar un archivo o extensión específica, digamos file1.txtde forma recursiva desde dirOriga dirDest. Pero necesito copiar el archivo solo si el subdirectorio ya está presente en dirDest.

Por ejemplo, puedo copiar sistemáticamente solo un archivo específico desde el origen al destino usando rsync usando

rsync -zarv  --prune-empty-dirs --include "*/"  --include="file1.txt" --exclude="*" "dirOrig" "dirDest"

Pero cómo restringir esta copia solo a los subdirectorios presentes en el destino ( dirDest)

Respuesta1

No conozco ningún comando, pero el truco que se me ocurrió es el siguiente.

  1. Úselo rsyncpara copiar dirOrigde server1aserver2

    rsync -zarv --prune-empty-dirs --include "*/" \ --include="file1.txt" --exclude="*" "server1:dirOrig" \ "server2:dirOrig"

  2. Elimine los subdirectorios en la copia dirOrigque no están presentes en el dirDestusocomm

    comm -23 <( cd server2:dirOrig && find -mindepth 1 -type d | sort ) \ <( cd server2:dirDest && find -mindepth 1 -type d | sort ) \ | ( cd server2:dirOrig && xargs rm -rf )

  3. Finalmente, sincronice dirDestcon dirOrigen función de la suma de comprobación y elimine todos los archivos en dirOrig que no estén presentes en dirDest, exceptofile1.txt

    rsync -acv --exclude=file1.txt --delete \ server2:dirDest server2:dirOrig

información relacionada