[gelöst] rsync if Abfrage (wenn rsync etwas kopiert dann...)

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
joe2017
Beiträge: 1274
Registriert: 07.08.2017 14:29:51

[gelöst] rsync if Abfrage (wenn rsync etwas kopiert dann...)

Beitrag von joe2017 » 09.09.2019 16:31:43

Hallo zusammen,

Ich möchte innerhalb eines Scripts abfragen ob rsync etwas kopiert hat. Falls ja sollte eine weiter Funktion folgen.
Gibt es eine einfache Methode abzufragen ob rsync etwas kopiert hat oder muss ich mit --stats das Ergebnis in eine Hilfsdatei schreiben und innerhalb dieser Datei suchen ob etwas kopiert wurde (Bsp. Suche nach "100%" oder "to-chk=1/")?
Die Hilfsdatei wäre etwas umständlich, ist aber die einzige Idee welche ich aktuell habe. In der Manpage hab ich hierzu nichts finden können. Gibt es einen einfachen Return Wert welchen man abfragen kann?
Zuletzt geändert von joe2017 am 10.09.2019 10:07:37, insgesamt 1-mal geändert.

Benutzeravatar
MegaV0lt
Beiträge: 173
Registriert: 21.11.2011 11:16:07
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: rsync if Abfrage (wenn rsync etwas kopiert dann...)

Beitrag von MegaV0lt » 10.09.2019 08:53:50

Ich hahbe in meinem Backup-Skript eine Abfrage drin:

Auszug:

Code: Alles auswählen

# Mittels dryRun überprüfen, ob sich etwas geändert hat
        echo "Prüfe, ob es Änderungen zu $LASTBACKUP gibt…"
        TFL="$(mktemp "${TMPDIR}/tmp.rsync.XXXX")"
        rsync "${RSYNC_OPT_SNAPSHOT[@]}" --dry-run --exclude-from="$EXFROM" \
          --link-dest="$LASTBACKUP" "$SOURCE" "$TMPBAKDIR" &> "$TFL"
        # Wenn es keine Unterschiede gibt, ist die 4. Zeile immer diese:
        # sent nn bytes  received nn bytes  n.nn bytes/sec
        mapfile -n 4 -t < "$TFL"  # Einlesen in Array (4 Zeilen)
        if [[ ${MAPFILE[3]} =~ sent.*bytes.*received.*bytes.* ]] ; then
          echo '==> Keine Änderung! Keine Sicherung erforderlich!'
          echo "==> Aktuelle Sicherung: $LASTBACKUP"
          NOT_CHANGED=1  # Keine Sicherung nötig. Merken für später
        fi
        rm "$TFL" &>/dev/null
Im Skript ab Zeile 679
https://github.com/MegaV0lt/MV_Backup
"Das Internet? Gibt's diesen Blödsinn immer noch?"
[Homer Simpson], Sicherheitsinspektor im Kernkraftwerk Springfield.

Benutzeravatar
joe2017
Beiträge: 1274
Registriert: 07.08.2017 14:29:51

Re: rsync if Abfrage (wenn rsync etwas kopiert dann...)

Beitrag von joe2017 » 10.09.2019 10:07:22

Hallo MegaV0lt,

danke für den Gedankenanstoß. :hail:

Ich habe das jetzt wie folgt gelöst:
Ich lasse mein rsync ein logfile erstellen (--log-file=/tmp/rsync.log).
Ich prüfe ob die zweite Zeile folgendes enthält...

Code: Alles auswählen

rsyncreturn=`sed '2!n' /tmp/rsync.log`

if [[ $rsyncreturn =~ .*sent.*bytes.*received.*bytes.* ]]; then
  echo "Es wurden keine Daten kopiert"
else
  echo "Es wurden Daten kopiert"
fi

Antworten