Execute o rsync somente se o diretório de destino existir?

1

Eu tenho uma unidade de backup secundária que normalmente é armazenada externamente, mas às vezes montada. Eu gostaria de colocar algo em um crontab que automaticamente clona minha unidade de backup para o backup secundário se ele estiver montado. Eu sei que eu poderia fazer algo como:

if [ -d $target_dir ]; then rsync -a --delete $src_dir $target_dir; fi

mas eu estou querendo saber se há uma maneira de perguntar ao rsync a mesma coisa, sem recorrer a um script de shell? Dado que ele tem 6.02 * 10 ^ 23 opções de linha de comando, você pensaria assim ...

    
por Scott Deerwester 02.11.2018 / 17:47

1 resposta

0

Aqui está um truque que provavelmente funcionaria ... No meu exemplo, o rsync terá sucesso se $ target_dir estiver na máquina 'remota' (localhost), senão falhar (por não executar o rsync remoto).

i.e.

src_dir=/etc;target_dir=/test/a;rsync -azp --rsync-path="[[ -d $target_dir ]] && rsync" $src_dir localhost:$target_dir

O código do resultado da falha deve ser 12 se o diretório remoto não existir ... porque ele nunca executou o rsync remoto devido à falha de "[[ -d $target_dir ]]"

12 Error in rsync protocol data stream

A ressalva é que você precisa usar um soquete TCP para fazê-lo funcionar, o que pode ser mais lento.

Outra opção, via /etc/crontab (que não requer um script), seria algo como ...

50 23 * * * root (src_dir="/test/src_dir"; target_dir="/test/target_dir"; [ -d $src_dir ] && [ -d $target_dir ] && rsync -a -v --delete ${src_dir}/ ${target_dir}/) &>> /var/log/test.log

    
por 02.11.2018 / 19:56

Tags