por que o arquivo de log do rsync não contém atualizações para arquivos regulares quando executado em seco?

1

No modo de execução seca, o arquivo de log não contém arquivos regulares alterados / atualizados e nenhuma exclusão. Apenas contém diretórios alterados e criados. No entanto, quando executado sem execução a seco, o arquivo de log contém todos os tipos de alterações.

Um pequeno exemplo: Ao executar o comando

rsync -a --delete-delay --progress --itemize-changes --stats --dry-run --log-file="/tmp/rsync-dry.txt" /tmp/mySource/ /tmp/myDest/

o arquivo de log é assim (3 itens, todos relacionados a diretórios):

2015/08/26 17:18:04 [5812] building file list
2015/08/26 17:18:04 [5812] .d..t...... ./
2015/08/26 17:18:04 [5812] .d..t...... sub1/
2015/08/26 17:18:04 [5812] cd+++++++++ sub2/
2015/08/26 17:18:04 [5812] Number of files: 11 (reg: 8, dir: 3)
2015/08/26 17:18:04 [5812] Number of created files: 5 (reg: 4, dir: 1)
2015/08/26 17:18:04 [5812] Number of deleted files: 4 (reg: 3, dir: 1)
2015/08/26 17:18:04 [5812] Number of regular files transferred: 6
...

Sem funcionamento a seco, ou seja,

rsync -a --delete-delay --progress --itemize-changes --stats --log-file="/tmp/rsync-wet.txt" /tmp/mySource/ /tmp/myDest/

o arquivo de log é assim (13 itens):

2015/08/26 17:19:44 [5837] building file list
2015/08/26 17:19:44 [5837] .d..t...... ./
2015/08/26 17:19:44 [5837] >f.st...... Bbb.txt
2015/08/26 17:19:44 [5837] >f+++++++++ Ccc.txt
2015/08/26 17:19:44 [5837] .d..t...... sub1/
2015/08/26 17:19:44 [5837] >f.st...... sub1/Fff.txt
2015/08/26 17:19:44 [5837] >f+++++++++ sub1/Ggg.txt
2015/08/26 17:19:44 [5837] cd+++++++++ sub2/
2015/08/26 17:19:44 [5837] >f+++++++++ sub2/Iii.txt
2015/08/26 17:19:44 [5837] >f+++++++++ sub2/Jjj.txt
2015/08/26 17:19:44 [5837] *deleting   sub3/Kkk.txt
2015/08/26 17:19:44 [5837] *deleting   sub3/
2015/08/26 17:19:44 [5837] *deleting   Ddd.txt
2015/08/26 17:19:44 [5837] *deleting   sub1/Hhh.txt
2015/08/26 17:19:44 [5837] Number of files: 11 (reg: 8, dir: 3)
2015/08/26 17:19:44 [5837] Number of created files: 5 (reg: 4, dir: 1)
2015/08/26 17:19:44 [5837] Number of deleted files: 4 (reg: 3, dir: 1)
2015/08/26 17:19:44 [5837] Number of regular files transferred: 6
...

que reflete com precisão o que o rsync está fazendo.

Estou perplexo porque eu acreditava que a saída do rsync com e sem --dry-run deveria ser a mesma. (Caso contrário, o que seria dry-run bom?) O problema refere-se apenas ao arquivo de log. A saída do terminal está sempre completa, com ou sem --dry-run.

Eu tentei diferentes opções, por exemplo --rtgopl ou -rtgo em vez de -a, -v em vez de -i. Eu tentei rearranjar as bandeiras. Eu tentei adicionar opções como -c ou --inplace. Não ajudou. Também não importa se o destino é outro caminho local (como no exemplo), uma unidade USB ou um destino remoto via ssh. O que eu fiz errado? Ou o rsync deveria funcionar assim? (Eu estou usando o Ubuntu 14.04, rsync versão 3.1.0.)

    
por Tammo J. 27.08.2015 / 14:43

1 resposta

2

Finalmente, descobri que o comportamento do rsync descrito acima pode ser um recurso, não um bug:

The current code logs the same way for a --log-file as it does for a daemon log, which means that it does not log transfers that aren't really transfers.

[ link ]

Para obter um arquivo de log no modo dry-run que realmente contém todas atualizações, criações e exclusões, como uma solução alternativa, você pode redirecionar a saída da tela para um arquivo, e. g. como

rsync -a --delete-delay --progress --itemize-changes --stats --out-format='%t %p %i %n %M %l' --dry-run /tmp/mySource/ /tmp/myDest/  | tee /tmp/rsync-dry.txt

No exemplo, usei a opção --out-format='%t %p %i %n %M %l' para formatar a saída mais ou menos da maneira que teria sido formatada pela opção --log-file .

    
por 19.09.2015 / 16:47

Tags