Używam rsync -rlptD
do skopiowania katalogu od innego użytkownika. Jest kilka plików (nie mam możliwości ich wcześniejszego poznania), których nie mam uprawnień do kopiowania. Czy istnieje sposób, aby rsync je zignorował. Problem polega na tym, że jeśli rsync zwróci wartość niezerową, mój skrypt bash -x zakończy działanie.
permissions
rsync
error-handling
JeffCharter
źródło
źródło
Odpowiedzi:
Rsync nie ma na to opcji. Widzę dwa rozwiązania. Jednym z nich jest parsowanie komunikatów o błędach rsync; to nie jest bardzo solidne. Drugim jest wygenerowanie listy nieczytelnych plików do filtrowania.
Jeśli
find
nie masz-readable
i-executable
zastąp je odpowiednią-perm
dyrektywą.Zakłada się, że nie ma nieczytelnych plików, których nazwa zawiera nowy wiersz. Jeśli musisz sobie z tym poradzić, musisz utworzyć listę plików rozdzielaną wartościami zerowymi i przekazać tę
-0
opcjęrsync
:źródło
stat()
dwukrotne uruchomienie każdego pliku (raz przez rsync i raz przez find) byłoby bardzo złe.\!
cytuje!
operatora, aby chronić go przed rozszerzeniem powłoki. Odwrotny ukośnik nie jest tutaj konieczny, ponieważ żadna skorupa nie rozszerza się,!
gdy następuje po niej spacja, ale nie boli. Co jest nie tak z ukrytymi plikami?Zrobiłem proste obejście tej konkretnej sytuacji:
Zwraca to,
0
jeśli zwrócony kod miał wartość 0 lub 23 i zwraca kod wyjścia we wszystkich innych przypadkach.Należy jednak pamiętać, że spowoduje to zignorowanie wszystkich
Partial transfer due to error
błędów, nie tylko tych związanych z uprawnieniami , ponieważ wychwytuje wszystko, co wychodzi z kodu23
. Aby uzyskać więcej informacji o kodach stanu rsync, zapoznaj się z tym linkiem .źródło