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)