Acabei de ter um problema semelhante ao mover vários TB de um NAS para um NAS diferente sem recurso de backup / restauração, o que permitiria que eu apenas alimentasse um conjunto para o outro.
Então eu escrevi este script para executar 1 rsync para cada diretório que encontrar. Depende de poder listar os diretórios de origem (tenha cuidado para escapar do ARG 3), mas acho que você poderia definir esse estágio com um rsync não recursivo que apenas copiava arquivos e diretórios para o nível apropriado.
Ele também determina quantos rsyncs serão executados com base no número de processadores, mas você pode querer ajustar isso.
A outra opção possível que vem à mente é: executar um rsync no modo --list-only.
Isso forneceria todos os arquivos que precisam ser atualizados Em seguida, execute 1 rsync para cada arquivo em sua lista, se você usou xargs para gerenciar o número de rsyncs que você tinha, isso poderia ser muito elegante. Na verdade, provavelmente uma solução mais elegante do que o meu pequeno roteiro aqui ...
#! /bin/bash
SRC_DIR=$1
DEST_DIR=$2
LIST=$3
CPU_CNT='cat /proc/cpuinfo|grep processor |wc -l'
# pseudo random heuristic
let JOB_CNT=CPU_CNT*4
[ -z "$LIST" ] && LIST="-tPavW --exclude .snapshot --exclude hourly.?"
echo "rsyncing From=$SRC_DIR To=$DEST_DIR DIR_LIST=$LIST"
mkdir -p /{OLD,NEW}_NAS/home
[ -z "$RSYNC_OPTS" ] && RSYNC_OPTS="-tPavW --delete-during --exclude .snapshot --exclude hourly.?"
cd $SRC_DIR
echo $LIST|xargs -n1 echo|xargs -n1 -P $JOB_CNT -I% rsync ${RSYNC_OPTS} ${SRC_DIR}/%/ ${DEST_DIR}/%/