rsync - relata apenas arquivos enviados


14

Estou com um problema com o rsync: ele mostra todos os arquivos nos diretórios que estou executando (se estiver usando o sinalizador -v) ou nada (quando não estiver usando -v).

Eu gostaria de ter o rsync silencioso, exceto pelos arquivos que realmente precisavam ser enviados para o outro lado. Existe um sinalizador para ativar esse tipo de relatório? Não consigo encontrar isso na documentação

Respostas:


11

Sim, confira a -ibandeira. Ele fornece um relatório de todas as operações em um formato enigmático. Consulte a página do manual para obter a definição exata do formato.

Para obter a lista de arquivos enviados ao host remoto, você pode usar o seguinte:

rsync <options> -i <src> <dst> | grep '^<' | awk '{ print $2 }'

1
Isso está relatando novamente todos os arquivos, não os alterados.
— dangonfast

@gonvaled Não, apenas os arquivos que são enviados para o host remoto são gerados (como <fcstpoguax filename, onde os diferentes sinalizadores mostram por que precisam ser atualizados). Se ele relatar todos os arquivos, algo pode estar errado com seu teste ou seu ambiente.
— 22712 Oliver

Eu acho que você está certo. Dei uma olhada na página de manual e ela está descrita como você diz. Mas meu sistema está relatando todos os arquivos. Talvez errado algo com o extremo ...
— dangonfast

Mmmm. aproximando-se: a cadeia de relatórios é (para todos os arquivos) <f..T....... De acordo com a página de manual, isso está relacionado aos registros de data e hora.
— dangonfast

1
utilizando grep -E '^[^.]|^$'também deixar estatística (ou avisos, erros ...) linhas através, apenas a remover as linhas muito chato começando com um ponto ...
— Frank Nocke

9

O rsync com um único -vrealmente imprime apenas os arquivos transferidos. Se você estiver obtendo a lista completa todas as vezes, provavelmente significa que o algoritmo padrão de comparação rsync src / dest, que é baseado no tempo de modificação + tamanho, não é adequado para o seu caso. Você pode adicionar o sinalizador -c( --checksum) que faz com que o rsync compare os arquivos com soma de verificação. Observe que isso obviamente gera alguma sobrecarga de E / S.

Um pouco relacionado é o fato de que, se você usar em --info=flistvez de -v, obtém uma saída mais aparada dos arquivos (basicamente pula o cabeçalho e rodapé da -vsaída típica ).


1
--info=flistestá disponível apenas em rsync> = 3.1, que não está disponível em todos os lugares. Por exemplo MacOS é entregue com uma antiga versão 2.6.9 porque Rsync v3 é GPL unter 3.
— chiborg

1
Embora esse boato sobre a Apple GPL seja super-suculento, lembre-se também de que o Enterprise Linux tem um grande alcance de suporte (14 anos) em que as versões são bloqueadas (e ramificadas) para preservar a certificação e garantir a compatibilidade (api + abi) durante a vida útil da versão . Na verdade, é a única maneira viável de fazer isso, e o efeito colateral é que os números das versões parecem antigos e os novos recursos não atingem a empresa pelo que pode parecer um longo período de tempo.
— user2066657

2

uma coisa que me vem à mente é usar um formato de log mais detalhado e descobrir o que você deseja obter.

por exemplo:

rsync -a --out-format="%b  %i %f" /etc/ /tmp/qq/ |awk '{if ($1>0) {print $3}}'

isso não é muito robusto, não manipula bem os nomes de arquivos com espaços.


1

1. Use a -iopção

Para esses sinalizadores de alteração iconizados (ou enigmáticos). Sua saída será assim:

*deleting   DSC00012 (copy).JPG
.d..tp..... ./
.f...p..... DSC00011.JPG
>f+++++++++ DSC00012 (copy2).JPG
>f.stp..... DSC00012.JPG
.f...p..... DSC00014.JPG

Number of files: 5 (reg: 4, dir: 1)
Number of created files: 1 (reg: 1)
... more statistic stuff
sent 636.01K bytes  received 4.63K bytes  1.28M bytes/sec
total size is 2.84M  speedup is 4.44

2. grep cada linha começando com um ponto.

Deixe todas as outras linhas (também as em branco, para legibilidade) passar:

rsync -arz -i --stats -h ... /mnt/FooDrive/ /mnt/backup  | grep -E '^[^.]|^$'

E aqui estamos nós :-) - Exatamente o que o médico ordenou:

*deleting   DSC00012 (copy2).JPG
>f.stp..... DSC00011.JPG
>f+++++++++ DSC00012 (copy).JPG

Number of files: 5 (reg: 4, dir: 1)
Number of created files: 1 (reg: 1)
...

Evitar pontos em vez de caça para > tem a vantagem de também deixar estatísticas, mas também potenciais erros, avisos etc passar por ...

Ter estatísticas no final é uma preferência pessoal. Não use -h --statsse você não gosta disso. Presumo que seu principal interesse seja não ver centenas ou milhares de arquivos inalterados rolar ...


0

Eu não acho que exista uma bandeira para fazer isso, mas pode haver agora. Aqui estava o que eu fiz:

rsync -vv [other options] | grep -v 'uptodate'

1
Meu rsync (versão 3.0.7) não é adicionado uptodateaos relatórios, portanto, não é possível filtrar isso.
— dangonfast

Quero corrigir, ou pelo menos esclarecer, o que Mike postou acima e o que @ jeckyll2hide apontou. Eu acho que o problema não é que o rsync -v não emite mais a string "uptodate", mas sim que você precisa usar o rsync -vv. Observe os dois vs. Acabei de verificar que isso funciona no Ubuntu 14.04 com rsync versão 3.1.0. Mike, você pode atualizar sua postagem para refletir isso?
— John Mark Mitchell
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.