estrutura de árvore de diretório rsync com profundidade restrita e excluir pastas específicas

1

Eu quero rysnc minha estrutura de pastas e subpastas sem seus arquivos, mas com uma profundidade máxima de 3 (/ folder1 / folder2 / folder3) e excluir pastas específicas (ex. cache /)

Eu tentei este comando:

$ rsync -azv --include=*/ --exclude=* --exclude=cache/ --exclude=/*/*/*/ source/ destination/

mas não está funcionando ... está copiando todas as pastas e subpastas; não respeita a profundidade máxima e não exclui a pasta da cache

Precisa usar outro parâmetro para restringir a profundidade máxima do rsyc; o que há de errado com meus parâmetros existentes?

p.s. última vez que fiz essa pergunta, ela foi marcada como duplicata de Filtro Rsync: copiando apenas um padrão

Não é como se ele não lidasse com a profundidade máxima nem lidasse apenas com a estrutura de árvore do diretório rsync. thx

    
por yeahman 09.10.2015 / 12:16

2 respostas

1

Você precisa excluir o padrão de vários níveis antes de incluir */ , pois o último significa "incluir todos os diretórios", substituindo a exclusão posterior. Você também precisa adicionar um nível extra, pois */ indica um diretório e /*/*/*/ significa "excluir três ou mais níveis".

O comando se torna:

rsync -azv --exclude='/*/*/*/*/' --include='*/' --exclude='*' --exclude=cache/ source/ destination/

(como o Wildcard já comentou, você deve sempre citar ou escapar dos metacaracteres do shell.)

    
por 09.10.2015 / 12:53
0

Para sincronizar duas árvores de diretório, respeitando o limite máximo de profundidade de três subdiretórios, use:

rsync -avz /source/ /destination --exclude "/**/**/**/*" --exclude=cache

Isso também excluirá o diretório chamado cache em qualquer lugar no caminho de origem.

    
por 09.10.2015 / 13:22

Tags