Używanie skryptu powłoki, aby sprawdzić, czy rsync wprowadził jakieś zmiany

10

Mam skrypt bash, który zawiera dwa katalogi rsync. Czasami jest zmiana, szanse są niczym.

Chcę uruchomić polecenie tylko wtedy, gdy rsync faktycznie dokonał zmiany (dodaj / zaktualizuj plik). W przeciwnym razie chcę to pominąć. Czy jest odpowiedź zwrotna, na którą powinienem patrzeć?

raccettura
źródło

Odpowiedzi:

11

Jeśli użyjesz opcji -i (i nie użyjesz opcji -v), rsync wypisze linie do STDOUT tylko dla wszelkich dokonanych zmian. W zależności od skryptu może to wyglądać

if [ -n "$(rsync -i /dir1 /dir2)" ]; then
  run_command;
fi
Greg D'Arcy
źródło
To wydaje się robić dokładnie to, czego chcę ... dzięki. Nie myślałem o takim użyciu flagi -i.
raccettura
Aby wyjaśnić, jeśli chcesz uruchomić skrypt tylko wtedy, gdy dokonano zmiany, ==powinno być !=.
hamx0r
No cóż, ten kod jest zły z tego, co widziałem. Jeśli chodzi o ten kod, to dostałeś go Rsync uruchomił FINE lub HAS ERROR, ale ten kod nie sprawdza, czy nastąpiła zmiana. Nie wiem, czy inna wersja Rsync mogłaby to zrobić, ale używam RSYNC w Raspbmc (mamy starą implementację) i OSMC. To smutne, ponieważ RSYNC wydaje się być wspaniałym narzędziem.
2
W przypadku -iwersji flag - rsync dane 3.1.1wyjściowe sending incremental file listnie są wprowadzane.
Dor