Uma barra de progresso de tamanho fixo, uma contagem de arquivos ou bytes ou, melhor ainda, um cronômetro mostrando o tempo estimado restante seria o ideal.
zip
O comportamento padrão de parece ser imprimir uma linha para cada arquivo processado, mas não quero que essa informação seja sobrecarregada quando zipar milhares de arquivos. Quero uma estimativa de quanto tempo vai demorar.
Tentei a opção -q
( --quiet
) em combinação com -dg
( --display-globaldots
), mas isso apenas inunda o stdout com várias linhas de pontos e não fornece nenhuma indicação útil.
Eu também tentei -qdgds 10m
conforme mencionado na página de manual, mas obtive o mesmo resultado.
Eu tentei -db
( --display-bytes
) e -dc
( --display-counts
), mas não parece haver uma opção global; portanto, ela a imprime novamente para cada nome de arquivo.
Por fim, tentei junto com o -q
like -qdbdc
, mas isso não gera nada.
Curiosamente, encontrei uma página de manual no site info-zip que menciona uma opção -de
( --display-est-to-go
) que deve "Exibir uma estimativa do tempo para concluir a operação de arquivamento".
Parece exatamente o que eu quero, mas o problema é que minha versão do zip
não possui esse recurso. Estou usando o Ubuntu 14.04.1 64bit, bash-4.3.30 (1) e zip-3.00. Segundo a Wikipedia, esta é a última versão estável do zip.
Existem versões beta não lançadas na página info-zip sourceforge, mas prefiro não confiar meus dados a uma versão beta.
tee
. Antes de iniciar o zip, faça uma contagem total dos arquivos (comls
oufind -type f
) e, enquanto estiver compactando, leia o arquivo de log para o número de linhas de arquivos processados que ele já possui (comgrep
as linhas corretas para examinar ewc -l
as linhas count), para que suas informações de alto nível mostrem algo como "234/76438 arquivos processados";pv /path/to/file | gzip > /path/to/file.gz
Respostas:
zip
pode compactar dados para saída padrão. Portanto, você pode combiná-lo com outras ferramentas, comopv
:Remova uma das
-bep
opções conforme sua conveniência.fonte
Se você concorda em usar o 7z:
Isso fornecerá uma barra de progresso como esta:
fonte
Eu usei com sucesso o seguinte:
E isso é explicado abaixo:
zip recursivamente no arquivo [target_zip] o [folder_to_zip] redirecionando stderr para stdout. Observe que o stderr conterá uma linha para cada arquivo e diretório sendo processado.
canalize as linhas com os nomes dos arquivos à medida que eles saem do zip. O pv é operado no modo de linha (a contagem do progresso com base nas linhas e no tamanho também está no número de linhas a serem esperadas - consulte a página de manual do PV -l opção ).
O tamanho total das linhas a serem esperadas é coletado listando recursivamente (ls) a [folder_to_zip] e contando as linhas começando com '-' ou 'd', ou seja, todos os arquivos e diretórios (lembre-se de que os diretórios são listados começando com '/') .
O acima fornece porcentagem exata de conclusão, pois os 100% são atingidos quando todos os arquivos e diretórios foram processados.
O problema com a resposta do pedroapero é que o progresso é calculado no número de bytes processados (compactados) sobre o número total de bytes a serem processados (não compactados). Como resultado, o processo será concluído em cerca de 30% (dependendo da taxa de compactação).
fonte