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?

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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.