Diz ao gzip / bzip2 / 7z / etc para não comprimir arquivos já comprimidos?

3

Estou atrasando / home, e canalizando através do bzip2. No entanto, tenho muitos arquivos já compactados (.jpg, .mp4, .mkv, .webm, etc) que o bzip2 não deve tentar compactar.

Existe algum compressor CLI que seja inteligente o suficiente (seja via libmagic ou o usuário enumerando extensões) para não tentar fazer o backup de arquivos não compressíveis ou minimamente compactáveis?

Uma pergunta semelhante foi feita há alguns anos, mas não sei se houve atualizações desde então. Posso comando 7z para pular a compressão (mas não a inclusão) de arquivos específicos ao comprimir um diretório com seus subs?

    
por RonJohn 23.01.2015 / 08:37

2 respostas

4

Da maneira que você está fazendo isso, com a compactação de um arquivo .tar , a resposta é com certeza que não.

Independentemente do que você usa para compactar o arquivo .tar , ele não sabe sobre o conteúdo do arquivo, ele apenas vê um fluxo binário e se partes desse fluxo são não compactáveis ou minimamente compactáveis, não há como isso é conhecido. Não fique confuso com as opções do comando tar para fazer a compactação, tar --create --xz --file some.tar file1 é tão "burro" quanto saber sobre o conteúdo do fluxo como tar --create file1 | xz > some.tar é.

Você pode fazer várias coisas:

  1. você alterna para algum formato de contêiner diferente de .tar , que permite compactar individualmente, mas isso é desfavorável se você tiver muitos arquivos pequenos em um diretório que tenha padrões semelhantes (conforme eles são compactados individualmente). O formato zip é um exemplo que funcionaria.
  2. você compacta os arquivos, se apropriado antes de colocá-los no arquivo tar. Isto pode ser feito de forma transparente com, e. o python tarfile e bzip2 modules Isso também tem as desvantagens do ponto 1. E não há extração direta do arquivo tar, pois alguns arquivos sairão compactados que podem não precisar de descompactação (como já foram compactados antes do backup) .
  3. Use o tar como está e viva com o fato de isso acontecer e selecione uma compactação não muito alta para gzip / bzip2 / xz , de modo que eles não tentem compactar muito o fluxo, não desperdiçando tempo na tentativa de obter outra compressão de 0,5%, o que não vai acontecer.

Você pode querer olhar para os resultados da compressão xz do paralelismo (não específico para arquivos tar), para ver alguns resultados de tentar acelerar xz como publicado no meu blog

    
por 23.01.2015 / 12:10
3

O algoritmo LZ4 pode ser uma opção.

Verifica se o início de um bloco é compressível e o armazena descompactado se a proporção for baixa. Isso evita com êxito a compactação de arquivos já compactados sem a necessidade de especificar seus nomes.

A taxa de compactação geral é menor em comparação com os algoritmos que você mencionou. Mas o LZ4 é muito rápido, por outro lado. Você pode facilmente atingir várias centenas de MiB / s de compressão e GiB / s de descompressão.

Exemplos:

# Compression (creates <inputfile>.lz4)
lz4c <inputfile>

# Decompression
lz4c -d <inputfile>

# Use with tar
tar cf - <directory> | lz4c > <directory>.tar.lz4

# Use with GNU tar
tar cf <directory>.tar.lz4 -I lz4c <directory>
    
por 23.01.2015 / 09:27