Como compactar todos os arquivos na pasta e apagar as versões não filtradas via linha de comando?

1

Eu tenho um disco de backup contendo versões não compactadas dos meus arquivos que gostaria de compactar para economizar espaço neste disco. O disco (contendo arquivos para compactar) está cheio (cerca de 3 TB com 17 GB livres). Existe um comando ou script que eu poderia executar para percorrer cada arquivo no disco e compactá-lo ao excluir as versões descompactadas. Por exemplo, se eu tenho pastas como f1 f2 f3 eu gostaria de acabar com f1.tar.gz f2.tar.gz f3.tar.gz apenas, com pastas descomprimidas originais apagadas para que eu tenha mais espaço na unidade? Além disso, funcionará também para subpastas?

Editar: Eu esperava compactar os arquivos o máximo possível sem correr o risco de corrupção. Existem cerca de 150 diretórios pai e a maioria tem 10 a 50 sub-pastas, algumas das quais contêm arquivos já compactados. Como um exemplo simplificado, minha estrutura de arquivos é parecida com:

Parent folders:
parent1 parent2 parent3

cada um dos quais pode ter algo como:

child1 child2 child3 file1.zip

e cada um pode ter

file1 file2.zip file2.tar.gz file3

é claro que algumas pastas pai contêm apenas arquivos sem subpastas. O que eu gostaria de fazer é executar um script do bash ou usar tar para colocar um comando para compactar as pastas pai para que pareçam:

parent1.tar.gz parent2.tar.gz parent3.tar.gz

enquanto apaga as pastas-pai descompactadas, então a primeira coisa que o comando comprimiria o parent1.tar.gz (supondo que eu tenha espaço suficiente para o arquivo tarball no mesmo disco rígido) e então apagaria para que a estrutura do arquivo parecido com

parent1.tar.gz parent2 parent3,

então o comando continuaria a fazer a mesma coisa para parent2 e parent3 terminando com a estrutura final do arquivo:

parent1.tar.gz parent2.tar.gz parent3.tar.gz

e, se possível, seria bom saber como estender essa operação para as subpastas, mas se isso for muito complexo ou não economizar muito espaço adicional, não será necessário. Também seria bom saber uma maneira de classificar os arquivos em ordem de espaço ocupada por cada um, para ver quantos arquivos seriam necessários para compactar individualmente, antes que haja espaço suficiente disponível para automatizar o processo, mas isso também é não é necessário.

    
por TarBall 19.06.2016 / 16:51

1 resposta

0

Alguém pode ter um script (ou escrever um). Eu faço esse tipo de coisa usando zip ou um script que usa gzip ou bzip2 . Ambos têm disposições para remover os arquivos após a conclusão do arquivamento.

Os problemas são

  • você pode escrever arquivos compactados para cada diretório
  • até a conclusão do arquivo, não é possível remover o diretório
  • você não pode atualizar um arquivo compactado, por exemplo, adicionando arquivos a ele.

Portanto, você precisa ter espaço livre suficiente para criar o primeiro arquivo e, gradualmente, obter espaço suficiente para gravar arquivos maiores. Presumivelmente você não tem muitos arquivos compactados (como png, jpg, pdf). Caso contrário, você não ganhará espaço.

Se não fosse pela grande probabilidade de falta de espaço, o problema seria simplesmente um loop de script sobre os diretórios a serem compactados / removidos. No entanto, com 17Gb de espaço livre de 3 TB, é provável que alguns diretórios tenham sido bastante grandes. Você terá que fazer algumas análises para ver se isso interfere na solução simples descrita.

Leitura adicional:

por 19.06.2016 / 17:05