rsync: jak wykluczyć najwyższy katalog

14

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.

Steve Pomeroy
źródło
Czy znasz składnię w tym przykładzie: wirespeed.xs4all.nl/mediawiki/index.php/... Umożliwia dołączanie określonych plików / katalogów z katalogu wykluczonego w inny sposób. Może być jednak konieczne użycie pliku wykluczenia.
jippie
Tak. Problem polega na tym, że nie mogę go przekonać do wykluczenia katalogu najwyższego poziomu (a konkretnie). W przeszłości nie miałem problemów z miksowaniem włączeń / wykluczeń, wygląda na to, że najwyższy poziom to szczególny przypadek.
Steve Pomeroy,

Odpowiedzi:

8

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.

rsync -rlptDu -- * server.example.com:/usr/local/directory/

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.

Gilles „SO- przestań być zły”
źródło
2
Wielkie dzieki! To działa. Jedynym minusem tej techniki jest to, że wymaga ona, aby powłoka wybrała wszystkie pliki. Jeśli masz mnóstwo plików w katalogu (czego nie mam w moim przypadku), może się zadławić. Można to prawdopodobnie naprawić za pomocą xargs (chociaż nie z opcjami --delete).
Steve Pomeroy,
Jednym z problemów, z którymi się spotkałem, *było to, --deleteże nie usunąłem żadnych plików, ponieważ nie były one częścią wyszukiwania.
thomasa88
@ thomasa88 Zobacz tę odpowiedź .
Kamil Maciorowski