
Tengo dos directorios dirOrig
y dirDest
en diferentes servidores remotos. Ambos tienen numerosos subdirectorios en distintas profundidades. Ahora necesito copiar un archivo o extensión específica, digamos file1.txt
de forma recursiva desde dirOrig
a 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.
Úselo
rsync
para copiardirOrig
deserver1
aserver2
rsync -zarv --prune-empty-dirs --include "*/" \ --include="file1.txt" --exclude="*" "server1:dirOrig" \ "server2:dirOrig"
Elimine los subdirectorios en la copia
dirOrig
que no están presentes en eldirDest
usocomm
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 )
Finalmente, sincronice
dirDest
condirOrig
en 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