Utilisation d'un script shell pour vérifier si rsync a apporté des modifications

10

J'ai un script bash qui rsync deux répertoires. Parfois, il y a un changement, les chances sont qu'il n'y a rien.

Je veux exécuter une commande uniquement si rsync a réellement effectué un changement (ajouter / mettre à jour un fichier). Sinon, je veux simplement le sauter. Y a-t-il une réponse de retour que je devrais examiner?

raccettura
la source

Réponses:

11

Si vous utilisez l'option -i (et n'utilisez pas l'option -v), rsync imprimera uniquement les lignes dans STDOUT pour toutes les modifications apportées. En fonction de votre script, cela pourrait ressembler à

if [ -n "$(rsync -i /dir1 /dir2)" ]; then
  run_command;
fi
Greg D'Arcy
la source
Cela semble faire exactement ce que je veux ... merci. Je n'ai pas pensé à utiliser le drapeau -i comme ça.
raccettura
Pour clarifier, si vous souhaitez exécuter le script uniquement si une modification a été apportée, cela ==devrait l'être !=.
hamx0r
Eh bien, tel qu'il est, ce code est faux d'après ce que j'ai vu. Quant à ce code, vous obtenez Rsync a fonctionné FINE ou HAS ERROR, mais ce code ne vérifie pas s'il y a eu un changement. Je ne sais pas si une autre version de Rsync pourrait le faire, mais j'utilise RSYNC dans Raspbmc (une ancienne implémentation que nous avons) et OSMC. C'est triste car RSYNC semble être un merveilleux outil.
2
Avec le -idrapeau - la version rsync 3.1.1sort sending incremental file listquand aucune modification n'est apportée.
Dor