Eu tenho uma coleção grande (~ 100GB não compactada) de arquivos que quero armazenar em < Pedaços de 2 GB para backup em um sistema de armazenamento baseado no Windows Server. Estou executando o Ubuntu na minha estação de trabalho.
Os conjuntos de dados são coletados em subdiretórios, com um tipo de estrutura em camadas. (por exemplo, o diretório A contém três subdiretórios 1, 2, 3, cada um contendo subdiretórios de 30, cada um contendo 6 ou 7 arquivos, com os mesmos nomes (em cada subdiretório))
tar compactará e arquivará meus dados, mas se eu quiser acessar seções individuais, será bastante doloroso. Também é lento, e se eu usar compressão, eu tenho que descomprimir antes de poder extrair diretórios individuais (afaik)
Isso estaria usando algo como:
tar -cf mySuperStructure.tar;
split -b 1024M mySuperStructure.tar mySuperStructure.tar.part- ;
gzip mySuperStructure.tar.part-* ;
ou similar - Eu sei que o tar tem uma opção -z , mas acho que isso pode ser problemático ao usar split ? Da mesma forma, acredito que há uma opção para dividir tar archives, possivelmente com compactação, mas os arquivos estão divididos de maneiras inúteis (talvez essa seja a melhor solução, se sim - por favor avise)
Como alternativa, dar será compactado em um arquivo por nível de arquivo, permitindo que uma opção -m especifique um tamanho mínimo. Isso seria ideal, mas para o grande número de arquivos, é muito demorado para compactar e arquivar a configuração. Os diretórios de nível mais baixo têm ~ 70MB de tamanho, então compactá-los seria útil (e eu suspeito que seja mais rápido, já que menos operações de compactação?)
Posso especificar a compactação dos subdiretórios individualmente, sem que arquivos individuais sejam compactados? Isso seria mais rápido se eu pudesse?
Uma implementação manual pode parecer:
for levelA in $(ls); do
cd levelA;
for subdirectoryCase in $(ls); do
cd subdirectoryCase;
for subdirSmall in $(ls); do
gzip subdirSmall;
done
cd ..;
tar -cf $subdirectoryCase.tar $subdirectoryCase;
gzip $subdirectoryCase.tar;
done
cd ..;
tar -cf $levelA.tar $levelA;
gzip $levelA.tar;
done
tar -cf superStructure.tar levelA1.tar levelA2.tar levelA3.tar;
gzip superStructure.tar;
mas parece que isso pode ser micro gerenciamento a um nível horrível (mas isso ainda pode ser melhor, não sei?) dar poderia ser substituído por tar , e split poderia ser usado talvez antes do final gzip , assumindo que os arquivos gzip'd anteriores eram suficientemente pequenos (o que eles não serão, mas presumivelmente é possível lidar de maneira semelhante)