Verwenden eines Shell-Skripts, um zu überprüfen, ob rsync Änderungen vorgenommen hat

10

Ich habe ein Bash-Skript, das die beiden Verzeichnisse von rsync enthält. Manchmal ändert sich etwas, wahrscheinlich gibt es nichts.

Ich möchte einen Befehl nur ausführen, wenn rsync tatsächlich eine Änderung vorgenommen hat (Hinzufügen / Aktualisieren einer Datei). Ansonsten möchte ich es einfach überspringen. Gibt es eine Antwort, die ich mir ansehen sollte?

Raccettura
quelle

Antworten:

11

Wenn Sie die Option -i verwenden (und nicht die Option -v verwenden), druckt rsync nur Zeilen an STDOUT, wenn Änderungen vorgenommen wurden. Abhängig von Ihrem Skript könnte dies so aussehen

if [ -n "$(rsync -i /dir1 /dir2)" ]; then
  run_command;
fi
Greg D'Arcy
quelle
Das scheint genau das zu tun, was ich will ... danke. Ich habe nicht daran gedacht, die -i-Flagge so zu verwenden.
Raccettura
Um zu klären, wenn Sie das Skript ausgeführt werden soll nur , wenn eine Änderung vorgenommen wurde, dann ==sollte es sein !=.
hamx0r
Nun, dieser Code ist falsch von dem, was ich gesehen habe. Für diesen Code wird Rsync mit FINE oder HAS ERROR ausgeführt, aber dieser Code überprüft nicht, ob eine Änderung vorgenommen wurde. Ich weiß nicht, ob eine andere Version von Rsync das könnte, aber ich verwende RSYNC in Raspbmc (eine alte Implementierung, die wir haben) und OSMC. Dies ist traurig, da RSYNC ein wunderbares Werkzeug zu sein scheint.
2
Mit der -iFlag-rsync-Version wird 3.1.1ausgegeben, sending incremental file listwenn keine Änderungen vorgenommen werden.
Dor