Preciso gerar uma lista de todos os arquivos em um determinado diretório, e truncá-la em listas X contendo cada um uma quantidade fixa de dados de arquivos.
Por exemplo, tenho 95 Gb de dados.
- gerar a lista de arquivos (
total.txt
) - dividido
total.txt
em 3 listas:slice1.txt
contendo a lista dos primeiros 35 Gb de arquivosslice2.txt
contendo a lista dos seguintes 35 Gb de arquivosslice3.txt
contendo a lista dos arquivos restantes
Alguma dica? Pesquisei no Google e brinquei com find, awk, grep, mas essa tarefa parece muito acima das minhas competências.
Responder1
Você pode tentar usar odividircomando para separar seus arquivos:
split total.txt -b 4444160
O acima seria dividido total.txt
em arquivos de 35 GB.
Responder2
while read filename; do cat $filename; done < total.txt | split -b 35G - slice
Isto criará "sliceaa", "sliceab", "sliceac" que você pode renomear.
Com outra implementação desplit
, você pode ter que dizer-b 35000m
Se você tiver bash, você pode escrever
cat $(< total.txt) | split -b 35G - slice
suponha que não existam centenas ou milhares de nomes de arquivos.
Para criartotal.txt
files=(*)
printf "%s\n" "${files[@]}" > total.txt