Rsync peut utiliser des hash pour définir si le fichier doit être copier, ou non.
Intégrer des hashs dans la copie est, à mes yeux, une idée néfaste.
Que ce soit en local (cp) ou plutôt sur le réseau (rsync), les deux programmes se basent sur des techno qui te garantissent la bonne copie et qui remonte une potentielle erreur.
Sur le réseau, rsync utilise TCP qui te garanti que, lorsqu’il a fini, la source et la destination sont rigoureusement identiques.
En local, les programmes se basent sur le kernel pour copier les fichiers, ce dernier te garanti que les données que tu as copiés sont bien copiés.
Faire des checks via diff ou hash a posteriori, c’est demandé au kernel s’il a fait une erreur.
Tu utilises une fonction pour vérifier que cette même fonction est correcte.
À mon humble avis, jamais il ne va te remonter une erreur.