Vamos dar uma olhada no seu comando
rsync -avh --ignore-existing -e ssh -r /home/data/logs/2017-09-* {dns,http}.*.log.gz / [email protected]:/home/pnlogs/
A fonte de coleta para isso é todos os arquivos (a recursão é ativada com -r - mas, na verdade, -a já faz isso) que corresponde a esses quatro caminhos:
-
/home/data/logs/2017-09-* -
dns.*.log.gz -
http.*.log.gz -
/
O último deles garantirá que o comando rsync tente copiar tudo.
Acho que o que você está querendo copiar é todos os arquivos de log DNS e HTTP dentro das pastas YYYY-MM-DD, mantendo a estrutura do diretório:
cd /home/data/logs &&
rsync -avhR 2017-09-*/{dns,http}.*.log.gz [email protected]:/home/pnlogs/
Eu não usaria --ignore-existing a menos que você tenha um motivo realmente strong para saber que deseja fazer isso. (Esse sinalizador impede que rsync reinicie uma transferência parcial. Lembre-se, você não tem --partial , então talvez isso seja discutível.)
Você não precisa de -r porque está usando -a e esse modo de arquivamento já inclui recursão. Mas, se eu tiver interpretado sua exigência corretamente, não haverá recursão de qualquer maneira.
O sinal -R informa rsync para manter os caminhos relativos das árvores de origem no destino. Eu usei cd para colocar o comando em um ponto de partida útil, porque senão você acabaria com /home/data/logs sendo incluído no caminho de destino. Envolva tudo isso entre parênteses ( ... ) se você quiser evitar que a alteração de diretório seja efetiva para o restante de qualquer script no qual isso seja executado.