Jak zmusić rsync do ignorowania brakujących plików?

9

Wykonuję polecenie jak poniżej dla kilku różnych systemów:

$ rsync -a -v [email protected]:'/path/to/first/*.log path/to/second.txt' /dest/folder/0007/.

Czasami * .log nie istnieje i to jest OK, ale rsync generuje następujący błąd:

receiving file list ... rsync: link_stat "/path/to/first/*.log" failed: No such file or directory (2)
done

Czy jest jakiś sposób, aby to ukryć? Jedynym sposobem, jaki mogę wymyślić, jest użycie filtrów włączania i wyłączania, które wydają mi się PITA. Dzięki!

Joe Casadonte
źródło

Odpowiedzi:

10

Myślę, że odpowiedź na pytanie najlepiej opisać w tej odpowiedzi:

https://stackoverflow.com/a/27637277/1236128

--ignore-missing-args

Niestety, tylko nowsze wersje mają tę funkcjonalność. Używam RHEL 7 z rsync 3.0.9, który wydaje się nie mieć tej opcji.

Jonathan Komar
źródło
2

Aby to wyjaśnić, chciałbyś po prostu nie „zobaczyć” błędu? W takim przypadku możesz po prostu przekierować standardowe wyjście błędów, ale może się okazać, że brakuje poważniejszego błędu, o którym możesz chcieć wiedzieć.

Przykład wyjścia błędu przekierowania

rsync -a -v [email protected]:'/path/to/first/*.log path/to/second.txt' /dest/folder/0007/ 2>/dev/null

Jeśli zamiast tego chcesz pominąć błąd tylko w pliku, który nie istnieje, nie możesz zmienić filtru rsync * .log i chcesz uniknąć użycia opcji include, możesz zawinąć go w skrypt, aby kontynuować na podstawie stan: schorzenie.

Przykład skryptu

#!/bin/sh
# Script to Handle Rsync based on Log File Existence
if [ "$(ls -A /path/to/first/*.log > /dev/null > 2&1)" ]; then
     # Log Exists Use This Rsync
    rsync -a -v [email protected]:'/path/to/first/*.log path/to/second.txt' /dest/folder/0007/
else
    # Log Does Not Exist Use This Rsync
    rsync -a -v [email protected]:'path/to/second.txt' /dest/folder/0007/
fi

Mam nadzieję, że pomogłem.

Krondor
źródło