sincroniza um arquivo em particular de forma recursiva, mas apenas nos subdiretórios presentes no destino

2

Eu tenho dois diretórios dirOrig e dirDest em diferentes servidores remotos. Ambos possuem numerosos subdiretórios em várias profundidades. Agora preciso copiar um arquivo ou uma extensão específica - por exemplo, file1.txt recursivamente de dirOrig para dirDest . Mas, eu preciso copiar o arquivo apenas 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 o rsync usando

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

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

    
por WanderingMind 05.11.2016 / 18:05

1 resposta

2

Eu não sei de um único comando, mas o hack que eu criei é o seguinte.

  1. Use rsync para copiar o dirOrig de server1 para server2

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

  2. Exclua os subdiretórios do dirOrig copiado que não estão presentes em dirDest usando comm

    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. Por fim, rsync o dirDest com dirOrig com base na soma de verificação e exclua todos os arquivos no dirOrig não presentes no dirDest, exceto file1.txt

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

por 05.11.2016 / 20:47