O zip não compacta arquivos ao compactar

2

Eu fechei um arquivo recursivamente em um diretório. Mas o que eu noto com esses últimos zips é que os arquivos não são comprimidos.

  adding: 1.3.12.2.1107.5.1.4.64517.30000014091005511462300042406.dcm (deflated 0%)
  adding: 1.3.12.2.1107.5.1.4.64517.30000014091005511462300042279.dcm (deflated 0%)
  adding: 1.3.12.2.1107.5.1.4.64517.30000014091005511462300042466.dcm (deflated 0%)
  adding: 1.3.12.2.1107.5.1.4.64517.30000014091005511462300042200.dcm (deflated 0%)
  adding: 1.3.12.2.1107.5.1.4.64517.30000014091005511462300042227.dcm (deflated 0%)
  adding: 1.3.12.2.1107.5.1.4.64517.30000014091005511462300042372.dcm (deflated 0%)
  adding: 1.3.12.2.1107.5.1.4.64517.30000014091005511462300042245.dcm (deflated 0%)
  adding: 1.3.12.2.1107.5.1.4.64517.30000014091005511462300042282.dcm (deflated 0%)

Alguém pode explicar por que isso ocorreria ao usar o zip?

    
por ryekayo 11.09.2014 / 17:08

1 resposta

6

Como mencionado no comentário , o SO pergunta tinha isso praticamente coberto. Agora, eu queria experimentar como essa deflação realmente funciona. Então, fiz o teste abaixo.

O que é entropia?

Entropy é uma medida da imprevisibilidade de um fluxo de informações. Um fluxo perfeitamente consistente de bits (todos os zeros, ou todos os outros) é totalmente previsível (não possui entropia). Um fluxo de bits completamente imprevisíveis tem entropia máxima. A ideia de entropia de informação é creditada a Claude Shannon, que deu uma fórmula para expressá-lo.

Agora, criei um arquivo apenas com y ou n , conforme abaixo.

perl -e 'my $y; $y .= int(rand(100))>90 ? "y" : "n" for (0..999); print $y;' > f1

Agora, eu corri o comando zip f1.zip f1 e obtive a saída como

zip f1.zip f1
  adding: f1 (deflated 89%)

Agora, no comando acima, temos bytes previsíveis y ou n , e é por isso que temos uma porcentagem deflacionada de 89.

Agora, estou realizando o experimento como abaixo.

 dd if=/dev/urandom of=./f2 bs=1M count=1

Se eu fizer o comando zip f2.zip f2 , isso é o que recebi como saída.

zip f2.zip f2
  adding: f2 (deflated 0%)

Como o /dev/urandom é completamente imprevisível, estamos obtendo uma taxa de deflação de 0%. O link de referência que forneci abaixo tem uma explicação muito boa sobre como calcular a entropia para bytes previsíveis.

Além disso, existe essa ferramenta ent para calcular a entropia de um arquivo em sistemas baseados no debian. Você poderia apenas fazer um apt get install ent e calcular a taxa de entropia como ent filename e descobrir o que realmente está acontecendo.

Você pode ler aqui sobre esse comando.

Referências

link

    
por 11.09.2014 / 17:42