RSync - Excluindo um subdiretório específico e seus filhos em que o subdiretório existe em níveis diferentes

37

G'Day,

Estou usando o rsync para sincronizar recursivamente uma árvore de pastas remotas semelhante à seguinte:

/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

Não sei como será a árvore de pastas e que ela mudará com o tempo. Então, o que eu quero poder fazer é recursivamente sincronizar o código acima, mas excluir a pasta "cache" e todas as subpastas que ela contém, para que eu acabe sincronizando:

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

Alguma sugestão?

A beira
fonte
Veja também um tutorial sobre o filtro rsync .
Gilles 'SO- stop be evil'

Respostas:

55

Você quer a --excludebandeira. Por exemplo, um rsync local:

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

É realmente simples - a regra de exclusão corresponderá a um diretório chamado "cache" em qualquer lugar da sua árvore.

Para obter mais informações, procure "--exclude" e a seção "FILTER RULES" na página de manual do rsync:

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

Jander
fonte
1
Doh !!. Obrigado, são as respostas mais simples que eu mais gosto :-)
TheEdge
1
Que tal não estar em nenhum lugar da árvore? Como, apenas excluir a/cache. UPD Veja esta resposta
x-yuri
2
Além disso --exclude /cache/(com o /) à esquerda, apenas excluirá o a/cachediretório, e não qualquer diretório nomeado cache.
Amir Ali Akbari
Por que a/ b/na linha de comando acima, o que isso significa?
Danijel
1
@ Danijel: a/é o diretório do qual estamos sincronizando (ou copiando); b/é o diretório em que estamos sincronizando.
Jander