
Tenho dois diretórios dirOrig
e dirDest
em 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.txt
recursivamente de dirOrig
para 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.
Use
rsync
para copiardirOrig
deserver1
paraserver2
rsync -zarv --prune-empty-dirs --include "*/" \ --include="file1.txt" --exclude="*" "server1:dirOrig" \ "server2:dirOrig"
Exclua os subdiretórios copiados
dirOrig
que não estão presentes nodirDest
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, sincronize novamente
dirDest
comdirOrig
base 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