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.