recursivamente sincronizar apenas arquivos específicos de subdiretórios específicos de um servidor remoto

1

A estrutura de diretórios que tenho é a seguinte

./model1
./model1/correct_data/file1.txt
./model1/bad_data/file1.txt
./model2
./model1/correct_data/file1.txt
./model1/bad_data/file1.txt

Só preciso sincronizar file1.txt que está presente no subdiretório correct_data .

O rsync pode ser usado para sincronizar recursivamente apenas file1.txt de todos os subdiretórios, conforme

rsync -zarvL --prune-empty-dirs --include "*/" --include="file1.txt" --exclude="*"' <from> <to>

No entanto, não tenho certeza de como adicionar a restrição adicional à sincronização apenas ao subdiretório correct_data

    
por WanderingMind 20.07.2017 / 22:17

1 resposta

1

Eu usaria isso

(
  cd {from} &&
    rsync -zavLR */correct_data/file1.txt {to}/
)

O novo ingrediente é -R , que aplica o caminho de origem de cada arquivo à raiz de destino {to} . Eu removi -r porque está implícito em -a . O -z só é relevante se o destino for realmente remoto. Você realmente pretende -L ?

O subshell mantém a pontuação do cd {from} limitado ao comando rsync .

    
por 20.07.2017 / 23:11