Obter lista de arquivos transferidos do rsync?

10

Atualmente, estou usando rsync em um script que implanta um aplicativo PHP de um teste para um servidor de produção. Aqui está como:

rsync -rzai --progress --stats --ignore-times --checksum /tmp/app_export/ [email protected]:/var/www/html/app/

No momento, está exibindo uma lista de todos os arquivos que estão sendo comparados (todos os arquivos do projeto), mas gostaria que saísse apenas os modificados, para que eu possa executá-lo com uma opção --dry-run para verificar se cada implantação está atualizando apenas os arquivos desejados.

NOTA: O melhor que pude fazer até agora é grep fcst dos resultados, mas estou procurando uma opção rsync que tenho certeza de que está lá, mas não consigo encontrá-la nas man pages.

Obrigado antecipadamente!

    
por Mauro 11.09.2012 / 23:40

4 respostas

5

Se houver uma opção de rsync para fazer exatamente o que você está perguntando, também não a encontrei no manpage. : -)

Dito isso, não vejo o problema em exibir a saída de rsync -i para analisar exatamente o que você precisa. Isso parece legal e Unixy para mim.

Um problema com o comando rsync: o -r é redundante, como está implícito em -a .

    
por 12.09.2012 / 00:11
2

Começando com o rsync v3.1.0, lançado em 2013, há o sinalizador --info que permite um controle refinado sobre a saída.

 --info=FLAGS
          This option lets you have fine-grained control over the information output you want to see.  An individual flag name may be followed
          by a level number, with 0 meaning to silence that output, 1 being the default output level, and higher numbers increasing the output
          of that flag (for those that support higher levels).  Use --info=help to see all the available flag names,  what  they  output,  and
          what flag names are added for each increase in the verbose level.  Some examples:

              rsync -a --info=progress2 src/ dest/
              rsync -avv --info=stats2,misc1,flist0 src/ dest/

          Note  that  --info=name’s  output  is  affected  by the --out-format and --itemize-changes (-i) options.  See those options for more
          information on what is output and when.

          This option was added to 3.1.0, so an older rsync on the server side might reject your attempts at fine-grained control (if  one  or
          more  flags  needed  to  be  send to the server and the server was too old to understand them).  See also the "max verbosity" caveat
          above when dealing with a daemon.

As sinalizações --info disponíveis são:

Use OPT or OPT1 for level 1 output, OPT2 for level 2, etc.; OPT0 silences.

BACKUP     Mention files backed up
COPY       Mention files copied locally on the receiving side
DEL        Mention deletions on the receiving side
FLIST      Mention file-list receiving/sending (levels 1-2)
MISC       Mention miscellaneous information (levels 1-2)
MOUNT      Mention mounts that were found or skipped
NAME       Mention 1) updated file/dir names, 2) unchanged names
PROGRESS   Mention 1) per-file progress or 2) total transfer progress
REMOVE     Mention files removed on the sending side
SKIP       Mention files that are skipped due to options used
STATS      Mention statistics at end of run (levels 1-3)
SYMSAFE    Mention symlinks that are unsafe

ALL        Set all --info options (e.g. all4)
NONE       Silence all --info options (same as all0)
HELP       Output this help message

Options added for each increase in verbose level:
1) COPY,DEL,FLIST,MISC,NAME,STATS,SYMSAFE
2) BACKUP,MISC2,MOUNT,NAME2,REMOVE,SKIP
    
por 17.05.2015 / 12:22
2

Use a opção --out-format

De acordo com a página man:

Specifying the --out-format option will mention each file, dir, etc. that gets updated in a significant way (a transferred file, a recreated symlink/device, or a directory).

Se você precisar apenas dos nomes reais dos arquivos ( --out-format="%n" ), seu comando dry run pode parecer:

rsync -rzan --out-format="%n" --ignore-times --checksum /tmp/app_export/ [email protected]:/var/www/html/app/

Quando o rsync é chamado com -v , ele usa internamente essa opção com um formato padrão de "%n%L" , que informa apenas o nome do arquivo e, se o item for um link, para onde aponta.

Mas isso também inclui um breve resumo no início e no final do processo de sincronização.

Para se livrar desse resumo, use a opção --out-format diretamente.

Entre. -i também usa internamente --out-format , mas com um formato de "%i %n%L" .

    
por 20.07.2017 / 14:32
0

Não tenho certeza se isso difere entre as versões / opções usadas, mas na versão mys quando eu uso a opção -i eu recebo uma lista como:

>f..T...... existing-file.png
>f+++++++++ new-file.png
cd+++++++++ new-dir/
>f+++++++++ new-dir/new-file.png

Portanto, uma solução simples para obter apenas uma lista de arquivos realmente transferidos é executada:

rsync [your options here] | grep -v "f..T......"

Isso simplesmente ocultará todas as linhas contendo f..T...... . Então, efetivamente, isso ocultará arquivos idênticos.

    
por 27.05.2016 / 18:18