J'ai un script qui utilise rsync pour synchroniser les données dans un scénario distant -> local. Immédiatement après l'exécution de la commande rsync, vérifiez si le code d'erreur est égal à zéro ou non. Si son zéro, d'autres commandes sont exécutées. Cependant, cela ne prend pas en compte le fait que rsync a pu s'exécuter correctement mais n'a en fait apporté aucune modification. De ce fait, la condition zéro égal fonctionnera indépendamment, ce qui est un peu redondant.
rsync -aEivm --delete /path/to/remote/ /path/to/local/
if [ $? -eq 0 ]; then
# Success do some more work!
else
# Something went wrong!
exit 1;
fi
Quelle serait la meilleure approche pour développer cela afin de vérifier s'il y avait réellement des changements basés sur la commande rsync qui a été exécutée. J'ai lu que l'indicateur -i peut fournir une sortie à stdout, mais comment cela peut-il être placé dans un bloc conditionnel?
la source
-v
, donc il fournit déjà les informations dont vous avez besoin pour sortir ... par exemple, une liste des fichiers qui ont été réellement envoyés. Si rien n'est changé, c'est juste./
.a=$("rsync command")
. Ceci exécuter larsync
commande et le magasinstdout
ena
. Ensuite, vous pouvez exécuter des tests sura
| grep /
ou quelque chose comme ça, puis vérifier l'état de sortie de grep avec$?
, il devrait être 1 s'il n'y a pas de sortie.Réponses:
Sur la base des commentaires de ma question d'origine, effectuez une sortie rsync vers stdout avec l'indicateur -i et utilisez une condition de vérification non chaîne pour voir si quelque chose a réellement changé dans la vérification du code d'erreur. Envelopper la commande rsync dans une variable permet d'effectuer la vérification.
Inconvénient potentiel, vous devez perdre la sortie détaillée, mais vous pouvez toujours la consigner dans un fichier à la place.
la source
Je voulais une solution plus stricte. Je ne veux pas solliciter
Number of created files:
(le message pourrait être dans une autre langue) ou supprimer toutes les lignes sauf deux en-v
sortie (qui sait quel résumérsync
sera imprimé dans la prochaine version?).J'ai trouvé que vous pouvez définir le format du
rsync
journal d'un, mais pas le format de sa sortie standard (voirman rsyncd.conf
).Par exemple, ajoutez un "Fichier modifié!" à chaque ligne avec un fichier réellement modifié, puis
grep
pour cela:la source