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!
Este artigo tem mais de um ano
Mais uma vez o WordPress come os dois “-” quando estão seguidos, o que obriga a um cuidado extra quando se fazem este tipo de posts com linhas de comando. Se houver uma forma prática de fazer isso divulguem aqui, para que futuros posts não tenham esse problema.
Reparei nisso ao ao editar o post, mas pensei que a “mania” passasse. Pelos vistos não.
Após alguma pesquisa descobri isto:
http://www.linuxscrew.com/2007/09/23/disable-double-hyphen-to-dash-wordpress-replacements/
Mas como a solução envolve acesso directo aos ficheiros WordPress pelo terminal, e essa não seria a solução imediata para já, descobri ainda o seguinte:
Editar o HTML do artigo e colocar o código do hífen, 2 vezes: --
(Como o editor de comentários converte o código, fica aqui o post original: http://blog.taragana.com/index.php/archive/how-to-add-double-dash-in-wordpress/ )
Solução pouco inteligente, mas serve por agora. Obrigada pelo reparo José Fonseca.
Não querendo parecer obsessivo, reparei que a parte do help do split ainda sofre do problema da falta dos dois hífens seguidos.
Nada disso. Ufa, acho que é desta! 🙂
Muito bem, estou a gostar de ver, o pplware tem subido muito de nível, ao mostrar que a informática, não é só windows.
este site não é como as revistas (prostitutas do windows) que temos em portugal
altamente
You need to fix the video after you join some videos:
mencoder -forceidx -oac copy -ovc copy file.avi -o file_final.avi
without this command, you will only see the first smaller video in the larger one even though it’s size increased.
These commands were supposed to split/join generic files, the example file was an .avi file for no reason. But thanks anyway.
Estes comandos destinam-se a juntar/separar genéricos, o ficheiro exemplo foi um ficheiro .avi sem razão especial. Mas obrigada na mesma.
Ana,
O que é que tu entendes por ficheiros genéricos? São ficheiros da Mylan?
De facto, quando vi o comando video.avi > a coisa pareceu-me muito fácil… 🙂
Tenho lido os teus posts aqui e considero-os óptimos mas em casos destes era conveniente que fizesses um teste aquilo que publicas para não induzir em erro
os teus aficcionados leitores entre os quais eu me incluo… 🙂
Já agora, porque é que não apareces no pt.comp.so.linux?
James
Eu não falei em juntar vídeos, falei em juntar ficheiros, qualquer ficheiro, independentemente da extensão (em Unix nem a extensão interessa).
Os comandos foram testados e funcionam sem problemas, longe de mim publicar comandos que não funcionassem!
PS: Talvez apareça lá. 🙂
Grande artigo Narciso! 😀
Gostei bastante da dica, pois é util.
Mas tirei-me esta duvida, se mandar isto para alguem q tenha o windows como é q eles juntam o ficheiros? o 7zip ou o winrar consegue junta-los?
com o winzip de certeza que consegue
Tal como está indicado no início do artigo, usas o HJSplit. 🙂
muito util p\ o usuario Linux, mas ainda prefiro o meu Vista, sei la me sinto um pouco arcaico usando codigos, digitando a era dos ja passou, p\ que complicar o que ja foi facilitado
Pode-se sempre usar o HJSplit para Linux, mas é um bocado redundante, já que em Linux, o HJSplit chama comandos semelhantes aos enunciados no artigo.
Mas para quem gosta de interfaces gráficas para tudo, é bom. 🙂
Ana,
Quem lê o artigo fica com a ideia de que em Linux só é possível “à moda antiga”. Devias referir que também existe uma interface gráfica para o HJSplit em Linux.
De resto, bom artigo. 😉
Caramba, é cada vez mais difícil satisfazer-vos.
E ainda bem!
Pelo menos, com as vossas sugestões, quando apropriadas, tornamos o artigo mais completo.
Embora eu já tivesse comentado esse facto num comentário acima, acrescentei uma pequena nota no artigo com a tua sugestão. Obrigada.
Dou um rebuçado a quem descobrir mais “falhas”, eheh.
Eu por mim estava satisfeito; não tenho problemas em recorrer ao terminal.
Acontece, e tu sabe-lo bem, que muitos utilizadores acusam o Linux de ser demasiado complicado, de ser só para geeks, e por isso, dizem eles, receiam que a migração seja demasiado penosa.
Repara bem: o título do artigo é “Juntar/separa ficheiros em Linux”. Um leigo olharia para isto, via uma tela preta assustadora com uns comandos lá metidos e pensava logo: “isto é que é facilidade de utilização?”. O meu comentário vai exactamente no sentido de relembrar às pessoas que há sempre mais do que uma forma de fazer as coisas; não é preciso decorar comandos.
Eu acho uma certa piada em recorrer ao terminal, escrever os comandos como se estivéssemos a falar na mesma língua que o computador. No entanto, é preciso lembrar que o GUI é sempre uma simplificação daquilo que se pode fazer na linha de comandos e, para um sistema operativo que pretende ganhar quota de mercado ao Windows, tem necessariamente que mostrar a sua faceta user-friendly.
É tudo. 🙂
Ana,
Julgo que descobri qualquer coisinha… e, por isso, mereço o tal rebuçadinho…:-)
De facto, no teu artigo, dizes:
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.
Não é solução mas é uma parte da solução: basta no final fazer aquilo que é dito pelo ANDREW.:-)
James
Boas, no windows isso também é possivel de ser fazer pela linha de comandos… uma vez saquei um ficheiro que vinha dividido do site “badongo” e vinha la um script para juntar as várias partes.
como faria para dividir arquivo de 100mb em partes de 20mb com o final extensão .001, .002, .003 e etc? é possível fazer isso com o comando split?
arquivo origem: origem.avi
arquivos destino: origem.avi.001, origem.avi.002, origem.avi.003