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!