Como transformar arquivo gzipado em um arquivo tar.gz no local?

1

Eu tenho muito (~ 5 milhões) de arquivos pequenos, cada um compactado individualmente com gzip . Eu gostaria de transformá-los em um grande tar.gz archive para economizar espaço (metadados), mas há limitações:

  • Eu não tenho espaço suficiente para descompactar arquivos e compactar novamente em tar.gz , então tenho que fazer isso no lugar . Relação de redução é muito boa, cerca de 15: 1.
  • Não posso usar muito tempo de CPU, por isso, a recompressão pode demorar muito tempo.
  • Os arquivos não podem ser movidos para outro lugar ou removidos, porque importantes motivos de segurança

O que posso fazer?

    
por maln0ir 24.03.2018 / 12:21

2 respostas

0

Você não precisa compactar o arquivo, basta adicionar os arquivos já compactados a ele.

tar -cf archive.tar directory_with_compressed_files
    
por 24.03.2018 / 12:24
0

Se tiver apenas espaço suficiente para fazer um pequeno número de arquivos, você poderá fazer o arquivamento em partes, e pode até mesmo ser automatizado se quiser. Supondo que seus arquivos estão armazenados algo assim:

.
+-dir0000
| +-file0000.gz
| +-file0001.gz
| [...]
+-dir0001
| +-file1000.gz
| +-file1001.gz
[...]

Para cada diretório, execute (da raiz compartilhada dos arquivos):

tar rf /path/to/archive_name.tar dir_name
rm -r dir_name

Se você estiver certo em automatizar isso (tentei e funcionou, mas você recebe mensagens de erro de find , que podem ser ignoradas), tente o seguinte:

find * -maxdepth 1 -type d -exec sh -c "tar rf /path/to/archive_name '{}' && rm -r '{}'" \;

(Como sempre, tente isso primeiro em uma estrutura de diretórios de teste para poder verificar se está fazendo o que você quer!)

Eu citei o {} caso seus diretórios tenham espaços. Se você tiver uma estrutura de arquivos simples, poderá fazer algo semelhante, apenas sem -type d . Certifique-se de não usar + no final de -exec , senão find tentará fazer um monte de arquivos / diretórios ao mesmo tempo, o que acaba com o ponto de quebrar o arquivamento em primeiro lugar !

Eventualmente, todos os arquivos serão movidos para o arquivo. Vai ser lento, mas isso pode ser feito.

    
por 25.03.2018 / 03:58

Tags