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ć?

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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.