usando o arquivo dividido do coreutils em partes para diretórios diferentes?

1

Como posso usar o comando coreutils split do GNU para dividir um arquivo grande em pedaços de um número L de linhas cada, mas colocando cada um dos diferentes subarquivos em diferentes diretórios ao mesmo tempo em que são criados?

Agora eu tenho um script perl que cria uma hierarquia de diretórios começando de ./00/00/00 para ./99/99/99 e fazendo perl impressões de cada linha em subarquivos no script, mas é muito mais lento do que o comando split do GNU faria, criando todos os subarquivos em um diretório. Eu gostaria de tê-los na hierarquia de diretórios, pois isso torna as coisas mais gerenciáveis para mim mais tarde.

Alguma idéia?

    
por 719016 02.07.2012 / 14:43

1 resposta

0

O programa não suporta isso (de acordo com as páginas info e man). A melhor aposta é mover os arquivos depois que eles são criados. Sua próxima melhor aposta é adicionar esse recurso e enviar um patch para o mantenedor atual.

A primeira opção não é tão difícil de fazer e não deve ser muito lenta, a menos que você esteja em um compartilhamento montado em rede. Considere usar uma partição reiserfs falsa para isso:

dd if=/dev/zero of=folders.reserfs bs=1M seek=5000 count=0
losetup  /dev/loop7  folders.reserfs
cfdisk /dev/loop7 # (make 1 primary partition)
mkreiserfs /dev/loop7
mkdir folders
sudo mount /dev/loop7  folders/  -o loop
cd folders

$ time echo  {00..99}/{00..99}/{00..99} |tr ' ' '\n' | xargs -L 10000 mkdir -p
time: Real 1m28.2s  User 0m9.9s  System 1m12.0s

mova os arquivos com algo como (provavelmente mais sábio para mover o maior número de arquivos possível de uma só vez e não 1 por 1 - use curingas e xargs -L):

for i in x*; do echo mv $i ${i:1:1}/${i:2:2} ;done
    
por 20.11.2012 / 16:57