sincronizar um arquivo específico recursivamente, mas apenas nos subdiretórios presentes no destino

sincronizar um arquivo específico recursivamente, mas apenas nos subdiretórios presentes no destino

Tenho dois diretórios dirOrige dirDestem servidores remotos diferentes. Ambos possuem vários subdiretórios em várias profundidades. Agora preciso copiar um arquivo ou extensão específica - digamos file1.txtrecursivamente de dirOrigpara dirDest. Porém, preciso copiar o arquivo somente se o subdiretório já estiver presente em dirDest.

Por exemplo, posso copiar sistematicamente apenas um arquivo específico da origem para o destino usando rsync usando

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

Mas como restringir essa cópia apenas aos subdiretórios presentes no destino ( dirDest)

Responder1

Não conheço nenhum comando, mas o hack que criei é o seguinte.

  1. Use rsyncpara copiar dirOrigde server1paraserver2

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

  2. Exclua os subdiretórios copiados dirOrigque não estão presentes no 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, sincronize novamente dirDestcom dirOrigbase na soma de verificação e exclua todos os arquivos em dirOrig não presentes em dirDest, excetofile1.txt

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

informação relacionada