Chcę zsynchronizować wiele źródeł i zastanawiam się, jak najlepiej to osiągnąć.
na przykład
/etc/fstab
/home/user/download
Myślałem o 3 rozwiązaniach:
- Rozwiązanie 1
wielokrotne połączenie z rsync
rsync -a /etc/fstab bkp
rsync -a /home/user/download bkp
con: trudniej mieć agregowane statystyki
- Rozwiązanie 2
utwórz tobackup
folder zawierający dowiązanie symboliczne i użyj -L
opcji
sync -aL /home/user/tobackup bkp
con: treść do kopii zapasowej nie może zawierać dowiązań symbolicznych
- Rozwiązanie 3
przenieś pliki do kopii zapasowej i utwórz dowiązanie symboliczne w oryginalnej lokalizacji
rsync -a /home/user/tobackup bkp
con: trochę ręcznej konfiguracji
Który polecasz?
Czy jest lepszy sposób?
Odpowiedzi:
Możesz przekazać wiele argumentów źródłowych.
To tworzy
bkp/fstab
ibkp/download
, podobnie jak osobne polecenia, które wydałeś. Zamiast tego może być pożądane zachowanie struktury źródłowej. Aby to zrobić, użyj/
jako źródła i użyj reguł włącz / wyłącz, aby określić, które pliki mają zostać skopiowane. Można to zrobić na dwa sposoby:Jawnie dołącz każdy plik, a także każdy składnik katalogu prowadzący do niego,
/***
na końcu katalogów, gdy chcesz skopiować całe drzewo katalogów:Uwzględnij wszystkie katalogi najwyższego poziomu za pomocą
/*/
(aby rsync przechodził/etc
i/home
podczas szukania plików do skopiowania) i katalogi drugiego poziomu za pomocą/*/*/
(dla/home/user
), ale usuwaj katalogi, w których żaden plik nie jest kopiowany. Jest to wygodniejsze, ponieważ nie musisz jawnie wymieniać rodziców. Możesz nawet użyć--prune-empty-dirs --include='*/'
zamiast zliczania poziomów, ale jest to tutaj niepraktyczne, ponieważ rsync przeglądałby cały system plików w celu eksplorowania katalogów, nawet jeśli żadna z reguł dołączania nie pasuje do niczego poza/etc
i/home/user/download
.źródło
Naprawdę podoba mi się odpowiedź Gillesa, chciałbym jednak dodać, że moim zdaniem wymóg synchronizacji wielu folderów przy jednoczesnym zachowaniu struktury katalogów najlepiej jest spełnić, przekazując wiele argumentów źródłowych w połączeniu z
--relative
opcją.W takim przypadku możemy mieć coś takiego:
co spowodowałoby
bkp/etc/fstab
ibkp/home/user/download
.Najlepszą częścią tego jest to, że (uważam od rsync v. 2.6.7) możemy w zasadzie kontrolować, ile struktur katalogów chcemy powielić w odbiorniku.
(Zobacz dokumentację
--relative
opcji tutaj )Więc np. Gdybyśmy to zrobili
skończylibyśmy na
bkp/user1/download
ibkp/user2/download
.źródło
Działa to również - nawiasy klamrowe, zawierające listę źródeł oddzieloną przecinkami.
Nieco podobne do tego, co dzieje się, gdy wywołujesz nawiasy klamrowe sytnax za pomocą cp i niektórych innych narzędzi:
źródło
-e