Atualmente, estou usando rsync
um script que implanta um aplicativo PHP de uma preparação para um servidor de produção. Aqui está como:
rsync -rzai --progress --stats --ignore-times --checksum /tmp/app_export/ root@app.com:/var/www/html/app/
No momento, ele está exibindo uma lista de todos os arquivos que estão sendo comparados (todos os arquivos do projeto), mas eu gostaria que ele exibisse apenas os modificados, para que eu possa executá-lo com uma --dry-run
opção para verificar se todas as implantações estão atualizando apenas o arquivo arquivos desejados.
OBSERVAÇÃO: O melhor que pude fazer até agora são grep fcst
os resultados, mas estou procurando uma rsync
opção que tenha certeza de que está lá, mas não consigo encontrá-la nas páginas de manual.
Desde já, obrigado!
-P
progresso faz exatamente isso na-n
configuração dryrun, embora-i
também não esteja errado. Veja minha resposta abaixo.Use a
--out-format
opçãoDe acordo com a página do manual:
Se você precisar apenas dos nomes reais dos arquivos (
--out-format="%n"
), seu comando dry run poderá se parecer com:rsync -rzan --out-format="%n" --ignore-times --checksum /tmp/app_export/ [email protected]:/var/www/html/app/
Quando o rsync é chamado
-v
, ele usa internamente esta opção com um formato padrão de"%n%L"
, que informa apenas o nome do arquivo e, se o item é 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
--out-format
opção diretamente.Btw.
-i
também usa internamente--out-format
, mas com um formato de"%i %n%L"
.fonte
A partir do rsync v3.1.0, lançado em 2013, existe o
--info
sinalizador que permite um controle mais refinado da saída.Os
--info
sinalizadores disponíveis são:fonte
Não tenho certeza se isso difere entre as versões / opções usadas, mas na versão mys quando uso a
-i
opção, recebo uma lista como:Portanto, uma solução simples para obter apenas uma lista de arquivos realmente transferidos é executada:
Isso simplesmente oculta todas as linhas que contêm
f..T......
. Tão eficazmente isso ocultará arquivos idênticos.fonte
Na verdade, você meio que respondeu sua própria pergunta, já que seu comando original já a possui:
--progress
Esta é a opção correta, embora a página de manual seja um pouco enigmática:
Meio que faz sentido, já que você invoca sua
rsync
string no modo dryrun, nenhum transer acontece, mas você ainda tem progresso: os arquivos que foram alterados e seriam transferidos.Dessa forma, você obtém uma pequena lista organizada de todos os arquivos, por exemplo:
O destino já possui uma cópia do arquivo alterado que foi atualizada no arquivo de origem e antigo, que permanece inalterado. A fonte também possui um arquivo adicional: newfile.
Se invocarmos seu comando rsync, mas removermos a especificação do item
-i
e apenas adicionarmos dryrun-n
Você obtém uma lista apenas dos arquivos que o rsync transfira: o arquivo alterado e o novo arquivo.
fonte