Mam więc pozornie prosty problem, ale jak dotąd nie znalazłem rozwiązania: chcę wykluczyć najwyższy katalog z rsync, jednocześnie synchronizując wszystkie jego elementy potomne. Szczególny problem polega na tym, że nie mam uprawnień do modyfikowania czasów najwyższego katalogu, ale chcę, aby wszystkie dzieci prawidłowo zsynchronizowały czasy.
Polecenie rsync, którego używam, jest następujące:
rsync --exclude ./ -rlptDu ./ server.example.com:/usr/local/directory/
i server.example.com:/usr/local/directory/
wygląda tak:
drwxrws--- 5 root staff 24576 Jul 9 15:00 .
(mój lokalny użytkownik jest członkiem staff
)
Po uruchomieniu rsync pojawia się następujący błąd:
rsync: failed to set times on "/usr/local/directory/.": Operation not permitted (1)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1070) [sender=3.0.9]
make: *** [pub_to_mel_internal] Error 23
Jest to wersja 3.0.9 na komputerze lokalnym i 3.0.7 na komputerze zdalnym, na obu komputerach z systemem Debian.
Odpowiedzi:
Myślę, że reguły filtrowania rsync nie mogą pasować do katalogu najwyższego poziomu, więc zawsze są zsynchronizowane. Obejściem tego problemu jest zsynchronizowanie wszystkich plików w tym katalogu zamiast samego katalogu.
Dodaj
.[!.]*
po,*
jeśli masz pliki kropek w najwyższym katalogu i..?*
jeśli masz nazwy plików zaczynające się od dwóch kropek.źródło
*
było to,--delete
że nie usunąłem żadnych plików, ponieważ nie były one częścią wyszukiwania.