rsync - reporta apenas arquivos enviados

12

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

Eu gostaria de ter o rsync silencioso exceto para os arquivos que realmente precisavam ser enviados para o extremo remoto. Existe um sinalizador para ativar esse tipo de denúncia? Eu não consigo encontrar isso na documentação

    
por dangonfast 22.06.2012 / 09:01

5 respostas

10

Sim, confira o sinalizador -i . Ele fornece um relatório de cada operação em um formato enigmático. Veja a man page para a definição exata do formato.

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

rsync <options> -i <src> <dst> | grep '^<' | awk '{ print $2 }'
    
por 22.06.2012 / 09:14
5

O rsync com um único -v imprime apenas os arquivos transferidos. Se você está obtendo a lista completa todas as vezes, isso provavelmente significa que o algoritmo padrão de comparação rsync src / dest, que é baseado na modificação time + size, não é adequado para o seu caso. Você pode adicionar o sinalizador -c ( --checksum ) que faz com que os arquivos de comparação do rsync sejam verificados. Note que isso obviamente incorre em alguma sobrecarga de E / S.

Ligeiramente relacionado é o fato de que, se você usar --info=flist em vez de -v , obterá uma saída mais aparada dos arquivos (basicamente, pula o cabeçalho e o rodapé da saída típica -v ).

    
por 14.01.2016 / 10:04
0

uma coisa que vem à minha mente é usar o 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}}'

isto não é muito robusto, não irá lidar bem com nomes de arquivos com espaços.

    
por 22.06.2012 / 09:29
0

1. Use a opção -i

Para esses sinalizadores de alteração iconizados (ou: cryptic). 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 em branco, para legibilidade) passarem:

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

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

*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)
...

Evitando pontos em vez de caçar > tem o benefício de também deixar estatísticas, mas também possíveis erros, avisos, etc. passarem ...

Ter estatísticas no final é uma preferência pessoal. Não use -h --stats se você não gostar deles. Eu assumo que seu principal interesse é não ver cem ou milhares de arquivos inalterados rolar por ...

    
por 26.02.2017 / 12:46
0

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

rsync -vv [other options] | grep -v 'uptodate'
    
por 22.06.2012 / 09:14

Tags