domingo, 30 de dezembro de 2007

Divida e junte arquivos e textos com os comandos split e cat

Num certo dia, fui baixar um vídeo no Badongo e observei que o vídeo estava dividido em duas partes. Imaginei que era um arquivo compactado, mas para minha surpresa o arquivo era binário. Ué, mas o que vou fazer com um arquivo binário?! Olhando mais embaixo no site tinha a seguinte mensagem: "Script do dispositivo para mesclar ficheiros Unix/Linux: Clique aqui para fazer o download do dispositivo de mesclar ficheiros".Baixei o script, abri ele e tinha as seguintes linhas:

#/bin/sh
cat heroes.118.by.islifecorp.rmvb.aa heroes.118.by.islifecorp.rmvb.ab > heroes.118.by.islifecorp.rmvb
rm heroes.118.by.islifecorp.rmvb.aa
rm heroes.118.by.islifecorp.rmvb.ab
rm heroes.118.by.islifecorp.rmvb.sh


O comando cat concatena as duas partes do arquivo:

heroes.118.by.islifecorp.rmvb.aa
heroes.118.by.islifecorp.rmvb.ab

O vídeo concatenado é jogado na saída:

> heroes.118.by.islifecorp.rmvb

As duas partes do arquivo e o script são removidos:

rm heroes.118.by.islifecorp.rmvb.aa
rm heroes.118.by.islifecorp.rmvb.ab
rm heroes.118.by.islifecorp.rmvb.sh

Muito simples, não? Agora vou explicar como o arquivo pode ser dividido com o comando split.Supondo que o vídeo do badongo tinha 139mb e eu queira dividí-lo em duas partes:

$ split -b 70m heroes.118.by.islifecorp.rmvb heroes.118.by.islifecorp.rmvb.


O parâmetro -b indica o tamanho de cada parte do arquivo que no caso era 70m (megabytes). A linha seguinte indica o arquivo que será dividido e a última indica a saída. Desta forma foram criados dois arquivos:

heroes.118.by.islifecorp.rmvb.aa com 70m
heroes.118.by.islifecorp.rmvb.ab com 69m

Como podem ver o split acrescenta no final do arquivo uma sequência (aa,ab) para que o arquivo possa ser juntado corretamente.Também é possível dividir arquivos de texto em várias partes. Cada parte corresponderá a um número de linhas que foi indicada na divisão. Veja exemplo com arquivo passwd (/etc/passwd).

$ split -l 5 /etc/passwd /tmp/passwd.


O parâmetro -l indica o número de linhas que conterá cada parte. No meu caso foram criados 5 arquivos:

passwd.aa passwd.ab passwd.ac passwd.ad passwd.ae

Para facilitar o trabalho de concatená-los, posso usar caracteres coringas (*):

$ cat /tmp/passwd.* > /tmp/passwd


Muito simples e prático.Para os usuários do sistema Rwindows existe um programa freeware Chainsaw que faz o mesmo trabalho.Obrigado prof. Márcio que foi quem me ensinou a usar o comando split no curso de linux e parabéns para o Badongo. ;)

2 comentários:

Lauro Cesar disse...

Muito legal estes comandos Jefinho. E úteis também.
Obrigado por compartilhar conosco!

Um abraço e feliz ano novo!

victoruas disse...

Bastante interessante e útil, realmente o Linux é maravilhoso e sempre nos surpreende.

Cumprimentos e feliz Ano Novo ;-)