ceci est ma commande de référence
rsync -rltDvh --perms --compress --modify-window=1 $1 --progress --stats --include-from='include-user.txt' --delete --delete-excluded ${HOME_FROM} ${HOME_TO}
Les flags sont pour, récusrif, verbeux, human readable, préserve les liens symboliques, aligne les dates
- --perms c'est pour conserver les permissions et l'exécutabilité, je veux que l'owner reste celui qui manipule le script, vu que ma destination c'est une connexion SSH j'ai pas envie de répliquer cette partie
- --compress n'est utile que si tu envoies à distance par SSH
- --modify-window c'est pour accepter une petite différence entre les dates, si la source et la destination ne sont pas le même système de fichier, c'est important. (surtout si l'un est du ntfs)
- --progress pour voir l'avancement par fichier (j envoie sur un serveur distant)
- --stats pour un résumé final
- --include-from pour définir un fichier d'inclusion (hautement recommandé pour gérer finement), tu peux aussi utiliser --exclude-from si tu veux plutôt une blacklist
- --delete pour dégager les fichiers qui existent sur la destination mais pas sur la source
- --delete-excluded pour dégager les fichiers qui sont ignorés (pour éviter d'avoir du bordel qui traîne si je change la liste d'inclusion)
- le $1 qui traîne dans la commande c'est juste pour pouvoir passer un argument à mon script, comme --dry-run, pour voir les fichiers affectés et contrôler manuellement.
Pour certains répertoires qui contiennent de gros fichiers comme des disques de VM mais qui ne changent juste de quelques octets, j'ajoute --inplace pour pemettre à rsync d'éventuellement n'envoyer que les quelques bytes qui ont changé plutôt que tout le fichier.