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?

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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.