Como rsync apenas diretórios que são ligados simbolicamente com nome específico

0

Eu visitei várias respostas sobre rsync e padrões, mas não consegui encontrar uma solução para esse problema em particular. Suponha que tenhamos uma estrutura de diretório como a seguinte em uma máquina remota, e gostaríamos de rsync para um diretório local. É como espelhar apenas a parte "LATEST" de um diretório remoto.

root
|-dir_a
| |-LATEST -> version_3
| |-version_1
| |-version_2
| '-version_3
|-dir_b
| |-LATEST -> version_1
|  'version_1
'dir_c
 |-LATEST -> version_3
 |-version_1
 |-version_2
 '-version_3

LATEST é um link simbólico e sempre aponta para a versão mais recente no remoto. No momento, estou tentando processar rsync --list-only output com um script de shell e sincronizar apenas as versões LATEST. Isso é um pouco doloroso. É um palpite; Eu acredito que há uma maneira de fazer isso com apenas alguns padrões --include e --exclude . Alguém poderia me ajudar a escrever um conjunto de padrões que podem fazer isso?

Além disso, prefiro encontrar uma maneira de remover uma versão antiga que não seja LATEST. Meu script passa por diretórios e localiza diretórios diferentes dos links mais recentes, e os remove. Isso é possível com o rsync?

    
por user1150609 22.02.2018 / 18:57

1 resposta

0

Eu aprendi que tal combinação de padrões não é trivial. Todos os diretórios no caminho da raiz para LATEST devem ser inscritos entre padrões de inclusão (com --include=*/ --include=*/dir_1/ ou --filter='+ /' --filter='+ /dir_1/' ). Da mesma forma, tudo o mais deve ser excluído com --exclude=* ou --filter='- /unwanted_dir/* ).

Meu script ainda analisa --list-only output para encontrar onde LATEST é linkado. Depois, incluo somente os caminhos que alcançam LATEST .

Eu considero experimentar com argumentos de linha de comando do rsync para que eu possa buscar LATEST como um link simbólico e onde quer que ele aponte.

    
por 04.03.2018 / 18:35

Tags