Como usar o rsync para espelhar alguns diretórios, mas apenas colocar arquivos em outros?

0

Como usamos o rsync para espelhar alguns diretórios, mas apenas colocar arquivos em outros? Por exemplo, dado o seguinte script de configuração:

#!/bin/bash

# Clear out the directories
rm -rf src dest

# Create the source directories
mkdir -p src/bar/baz

# Create files in each of the source directories
touch src/frodo{1..10}
touch src/bar/gandalf{1..5}
touch src/bar/baz/balrog{1..15}

# Create the destination directories
mkdir -p dest/bar/baz

# Create files in each of the destination directories
touch dest/bulbasaur{1..7}
touch dest/bar/charmander{1..11}
touch dest/bar/baz/squirtle{1..17}

Temos uma estrutura de diretórios onde

src/
├── frodo*
├── bar
│   └── gandalf*
│   └── baz
│       └── balrog*

e

dest/
├── bulbasaur*
├── bar
│   └── charmander*
│   └── baz
│       └── squirtle*

Gostaria de espelhar os diretórios / e /bar/baz , mas apenas adicionar arquivos ao diretório /bar/ . Basicamente, eu gostaria que o seguinte ocorresse

dest/
├── frodo*
├── bar
│   └── gandalf*
│   └── charmander*
│   └── baz
│       └── balrog*

Dito isto, o seguinte não parece funcionar

rsync --delete -a -v --exclude='/bar/*' src/ dest

Não posso esperar porque a pasta baz está sendo excluída. No entanto, não sei como adicioná-lo novamente. Basicamente, o seguinte não funciona:

rsync --delete -a -v --exclude='/bar/*' --include='/bar/baz/*' src/ dest

Como tal, existe uma boa maneira de escolher seletivamente quais diretórios espelhar e quais diretórios não espelhar? Caso isso seja importante, isso está indo para um script maior com um conjunto moderadamente complicado de pastas e aninhamento. Realmente, o que eu gostaria de ter acontecido é ser capaz de alternar de forma recursiva se estamos no modo de espelho ou apenas colocar o modo de arquivos. Obrigado pela ajuda!

    
por wyer33 28.01.2018 / 21:02

0 respostas