Mise à jour: Comme le délai d'attente semble se produire lorsque rsync crée les sommes de contrôle, voici différentes approches qui peuvent fonctionner.
Premièrement, pour ne garder qu’un seul rsync ouvert, vous pouvez (en plus des options mentionnées par Michael Kjörling) jouer avec l’option --sockopts. Cela vous donne la possibilité de définir le même type d'options de socket que vous pouvez définir lors de la création d'un socket dans le code, par exemple SO_RCVTIMEOUT=0pour désactiver les délais d'attente pour la réception de données.
Deuxièmement, l' --progress-fileoption peut suffire à ne pas déclencher le délai d'attente, en renvoyant en permanence des informations de progression.
Troisièmement, vous pouvez faire une synchronisation fichier par fichier, par exemple comme ceci:
for i in ls /path/to/dir; do rsync -ca $i remoteserver:/path/to/dir; done
Quatrièmement, vous pouvez utiliser ssh comme mécanisme de transfert et utiliser ses options TCPKeepAliveet ServerAliveInterval/ ServerAliveCountMaxde manière appropriée pour maintenir la connexion active.
Réponse originale:
rsync déjà fait une approche fichier par fichier - il vérifiera chaque fichier dans la liste des fichiers à être synchronisés, et ne synchroniser ceux qui n'existent pas sur le système cible, ou qui sont différents de ces fichiers sur le système cible.
Ce que vous pouvez faire pour réduire le temps de transfert est d’utiliser l’option -zqui compressera pendant le transport et le drapeau --partialpour que, si le transfert est interrompu, vous conserviez tout fichier partiellement synchronisé afin que rsync puisse continuer où il était. Les options --timeout et --ontimeout mentionnées par Michael Kjörling seraient également utiles.