sábado, 23 de maio de 2009

Juntar/separar ficheiros em Linux

Quantas vezes precisamos de partir aquele ficheiro gigantesco em ficheiros mais pequenos de forma a ser possível o seu envio, ou quando fazemos download daquele ficheiro, irritantemente separado em vários pedacinhos…

“Mas em Windows usava o HJSplit!”

E então? Em Linux é à moda antiga, comando na consola. Simples, eficaz e sem precisar de programas extra.


Se mesmo assim prefere a interface gráfica, aconselho novamente o HJSplit, na sua versão para Linux. Mas dado que esse programa apenas faz aquilo que lhe vou mostrar de seguida, considero-o um pouco redundante. Fica então ao seu critério. :)

Separar ficheiros

Para separar um ficheiro em vários pequenos ficheiros faça no terminal:

split –bytes=10m /caminho/grande/ficheiro/ /caminho/ficheiro/pequeno

Em que 10m corresponde a separar um grande ficheiro em ficheiros de 10MB.

Atenção: O comando split separa um ficheiro em diversos ficheiros mais pequenos sem qualquer significado individual, não sendo possível visualizar cada ficheiro resultante por si só.

Para personalizar completamente o comando split (tamanho dos ficheiros, sufixos numéricos/alfabéticos), pode correr o comando:

ana@doomy:~/$ split –help
Argumentos obrigatórios para opções longas também o são para opções curtas.
-a, –suffix-length=N usa sufixos de comprimento N (por defeito 2)
-b, –bytes=TAM põe TAM bytes por ficheiro de saída
-C, –line-bytes=TAM põe na maioria TAM bytes de linhas por ficheiro
de saída
-d, –numeric-suffixes usa sufixos numéricos em vez de alfabéticos
-l, –lines=NUMERO põe NUMERO linhas por ficheiro de saída
–verbose mostra um diagnóstico no erro padrão antes de
de cada ficheiro de saída ser aberto
–help mostra esta ajuda e sai
–version mostra a informação da versão e sai

TAMANHO pode ter um sufixo multiplicador:
b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024,
GB 1000*1000*1000, G 1024*1024*1024 e por aí fora para T, P, E, Z, Y

Juntar ficheiros

Para juntar vários ficheiros num só ficheiro, basta usar a magia do cat. Fazer cat a todos os ficheiros e “redireccionar” esse output para um único ficheiro.

Imagine que tem vários ficheiros com nomes como “video.avi.001″, “video.avi.002″, “video.003″, etc. Para os juntar num único ficheiro “video.avi”, basta digitar o seguinte comando:

cat video.avi* > video.avi

Em que video.avi* é uma expressão regular que simboliza todos os ficheiros pequenos começados por video.avi.

Atenção: O comando cat une pequenos ficheiros sem qualquer utilidade individual num só ficheiro, esse sim, com utilidade. Quero com isto dizer que, se pretende juntar vários ficheiros de vídeo diferentes num só, esta não é a solução.

E pronto, dependendo do tamanho do ficheiro resultante, poderá demorar mais ou menos tempo a juntá-lo, mas no fim, o resultado será o esperado: um só ficheiro sólido e consistente.

Bons joins e splits!