Como criar vários zips de um diretório contendo um milhão de arquivos xml?

4

Eu tenho um diretório contendo milhões de arquivos xml. Eu quero criar vários arquivos zip contendo n número de arquivos xml. Por ex: se n = 10000, eu quero criar 100 arquivos zip, ou seja, cada arquivo zip terá apenas 10000 arquivos xml.

Qual é a maneira mais eficiente de criar esses arquivos zip? Não quero que esse processo leve mais tempo, pois tenho que repetir essa operação para várias pastas com milhões de arquivos xml.

    
por user1617267 22.08.2012 / 19:54

2 respostas

1

Isso pode ser útil:

$ zip all.zip *.xml  ## create a big archive.

Encontre o tamanho total do arquivo:

$ ls -lh all.zip

Agora, divida o grande arquivo em pequenos arquivos, conforme necessário:

$ split -b 5M all.zip ## creates 5 MB zips

Nota: a extração dos arquivos não funciona, a menos que você os reconecte:

cat x* > oldbigzip.
    
por 22.08.2012 / 22:56
1

Eu faria assim:

# Create file list
find . -type f -name '*.xml' > filelist

n=10000
fileno=1

# Loop through list, extracting n names each time
for i in $(seq 1 $n $(wc -l < filelist)); do
  zipfile="zipfile$(printf "%04d" $((fileno++)))"
  sed -n "$i,$((i+n-1))p" filelist | zip $zipfile -@
done
    
por 23.08.2012 / 00:35