Mam skrypt, który używa rsync do synchronizacji danych w zdalnym -> scenariuszu lokalnym. Natychmiast po uruchomieniu komendy rsync sprawdź, czy kod błędu jest równy zero, czy nie. Jeśli jest zero, wykonywane są dalsze polecenia. Nie bierze to jednak pod uwagę faktu, że rsync mógł działać poprawnie, ale nie wprowadził żadnych zmian. Z tego powodu warunek równego zeru będzie działał niezależnie, co jest nieco zbędne.
rsync -aEivm --delete /path/to/remote/ /path/to/local/
if [ $? -eq 0 ]; then
# Success do some more work!
else
# Something went wrong!
exit 1;
fi
Jakie byłoby najlepsze podejście do rozszerzenia tego, aby sprawdzić, czy rzeczywiście były jakieś zmiany na podstawie uruchomionego polecenia rsync. Czytałem, że flaga -i może dostarczyć wyjście na standardowe wyjście, ale jak można to umieścić w bloku warunkowym?
shell-script
files
rsync
James White
źródło
źródło
-v
tam, więc już dostarcza informacji, których potrzebujesz, aby stdout ... np. Listy plików, które zostały faktycznie wysłane. Jeśli nic się nie zmienia, to po prostu./
.a=$("rsync command")
. Spowoduje to wykonaniersync
polecenia i zapisaniestdout
wa
. Następnie możesz uruchomić testya
| grep /
coś lub coś takiego, a następnie sprawdzić status wyjścia grep za pomocą$?
, powinien wynosić 1, jeśli nie było wyjścia.Odpowiedzi:
Opierając się na komentarzach do mojego pierwotnego pytania, ustaw wyjście rsync na standardowe wyjście z flagą -i i użyj warunku sprawdzania nieciągłości, aby sprawdzić, czy coś faktycznie zmieniło się w ramach sprawdzania kodu błędu. Zawinięcie polecenia rsync w zmiennej pozwala na sprawdzenie.
Potencjalne minusem, musisz stracić pełne dane wyjściowe, ale zawsze możesz zamiast tego zalogować je do pliku.
źródło
Chciałem bardziej rygorystycznego rozwiązania. Nie chcę grepować za
Number of created files:
(wiadomość może być w innym języku) ani usuwać wszystkich wierszy oprócz dwóch-v
wyjściowych (kto wie, jakie podsumowaniersync
wydrukuje w następnej wersji?).Odkryłem, że możesz ustawić format
rsync
dziennika, ale nie format jego standardowego wyjścia (patrzman rsyncd.conf
).Na przykład dodaj „Plik zmieniony!” do każdej linii z faktycznie zmienionym plikiem, a następnie
grep
:źródło