RSync - Z wyłączeniem określonego podkatalogu i jego elementów podrzędnych, w których podkatalog istnieje na różnych poziomach

37

G'Day,

Korzystam z rsync do rekurencyjnej synchronizacji zdalnego drzewa folderów, które wygląda mniej więcej tak:

/folderA/a1/cache
/folderA/a1/cache/A1
/folderA/a1/cache/A2
/folderA/a1/somefolder
/folderA/a1/someotherfolder
/folderA/a2/somefolder/cache
/folderB/cache/
/folderB/b1/somefolder/cache
/folderB/b1/somefolder/yetanotherfolder/cache
/folderB/b1/somefolder/yetanotherfolder/cache/B1
/folderB/b1/somefolder/yetanotherfolder/cache/B2

Nie wiem, jak będzie wyglądać drzewo folderów, które z czasem się zmieni. Chcę więc rekursywnie zsynchronizować powyższe, ale wykluczę folder „cache” i wszystkie zawarte w nim podfoldery, aby ostatecznie zakończyć synchronizację:

/folderA/a1
/folderA/a1/somefolder
/folderA/a1/someotherfolder
/folderA/a2/somefolder
/folderB/
/folderB/b1/somefolder
/folderB/b1/somefolder/yetanotherfolder/

Jakieś sugestie?

Krawędź
źródło
Zobacz także samouczek dotyczący filtrowania rsync .
Gilles 'SO - przestań być zły'

Odpowiedzi:

55

Chcesz --excludeflagę. Na przykład lokalny rsync:

rsync -a --exclude cache/ src_folder/ target_folder/

To naprawdę takie proste - reguła wykluczania będzie pasować do katalogu o nazwie „pamięć podręczna” w dowolnym miejscu w drzewie.

Aby uzyskać więcej informacji, poszukaj „--exclude” i sekcji „FILTER RULES” na stronie man rsync:

http://www.samba.org/ftp/rsync/rsync.html

Jander
źródło
1
Doh !! Dzięki, to proste odpowiedzi, które lubię najbardziej :-)
TheEdge
1
A może nigdzie na drzewie? Tak, tylko wyklucz a/cache. UPD Zobacz tę odpowiedź
x-yuri,
2
Również --exclude /cache/(z wiodącym /) wyklucza tylko a/cachekatalog, a nie katalog o nazwie cache.
Amir Ali Akbari,
Dlaczego a/ b/w powyższej linii poleceń co to oznacza?
Danijel
1
@Danijel: a/to katalog, z którego synchronizujemy (lub kopiujemy); b/to katalog, do którego synchronizujemy.
Jander,