http://www.zago.eti.br/split.txt FAQ e dicas pra dividir um arquivo em tamanhos menores e também como recuperar este arquivo, útil pra gravar arquivos em disquete ou CD quando o arquivo original é maior que a capacidade do disco onde vai gravar. Dividir arquivo texto por linhas ou bytes, criar arquivos menores com limitação do numero de linhas ou bytes, quebrar um texto em varios arquivos. Use CTRL+F para refinar a pesquisa. Linha de: **************** separa mensagens ou tópicos. ******************************************************** Zago http://www.zago.eti.br/menu.html FAQ e artigos sobre Linux Consulte o manual: man split split está no pacote coreutils, pra instalar: apt-get install coreutils Pra conferir se está instalado, whereis split, ou: rpm -qf /usr/bin/split coreutils-5.2.1-62747cl Indicações; tutoriais, artigos e material relacionado divisão de arquivos. O comando split Exemplos de comando para dividir um arquivo baseando-se no número de linhas ou número de bytes que cada arquivo novo deve conter. http://www.dicas-l.com.br/dicas-l/19970618.php Divisão de um arquivo para gravação em floppies http://www.dicas-l.com.br/dicas-l/19980301.php O comando slice http://www.dicas-l.com.br/dicas-l/19970621.php O comando csplit http://www.dicas-l.com.br/dicas-l/19970619.php Algumas sugestões de pesquisa no Google: define:split Re: split ~linux split ~linux how to split ~linux howto split ~linux ************************************** Para dividir um arquivo chamado /tmp/grandearquivo para ser gravado em disquetes digite: split -b 1468000 /tmp/grandearquivo Por exemplo: split -b 1468000 wxPythonGTK-py2.3-2.4.0.7-1.i386.rpm vai manter o arquivo original e criar os arquivos, xaa, xab, xac, xad, xae e xaf com tamanho que cabe em disquete, veja o resulta de ls -la: -rwxrwxrwx 1 zago zago 8350478 Mai 7 20:08 wxPythonGTK-py2.3-2.4.0.7-1.i386.rpm -rw-rw-r-- 1 zago zago 1468000 Ago 6 20:12 xaa -rw-rw-r-- 1 zago zago 1468000 Ago 6 20:12 xab -rw-rw-r-- 1 zago zago 1468000 Ago 6 20:12 xac -rw-rw-r-- 1 zago zago 1468000 Ago 6 20:12 xad -rw-rw-r-- 1 zago zago 1468000 Ago 6 20:12 xae -rw-rw-r-- 1 zago zago 1010478 Ago 6 20:12 xaf No destino para recuperar o arquivo original use o "cat" neste formato: cat pedaco1 pedaco2 pedaco3 ... pedacoN > arquivo_remontado Para o exemplo acima no destino teremos os seguintes arquivos copiados: drwxrwxr-x 2 zago zago 4096 Ago 6 20:22 . drwx------ 7 zago zago 4096 Ago 6 20:18 .. -rw-rw-r-- 1 zago zago 1468000 Ago 6 20:18 xaa -rw-rw-r-- 1 zago zago 1468000 Ago 6 20:18 xab -rw-rw-r-- 1 zago zago 1468000 Ago 6 20:18 xac -rw-rw-r-- 1 zago zago 1468000 Ago 6 20:18 xad -rw-rw-r-- 1 zago zago 1468000 Ago 6 20:18 xae -rw-rw-r-- 1 zago zago 1010478 Ago 6 20:18 xaf A linha de comando abaixo remonta o arquivo: cat xaa xab xac xad xae xaf > wxPythonGTK-py2.3-2.4.0.7-1.i386.rpm Simplificando: cat xa[a-f] > wxPythonGTK-py2.3-2.4.0.7-1.i386.rpm onde: [a-f] identifica o primeiro e ultimo pedaço, o primeiro pedaço deverá ser sempre idendificado por "a", neste exemplo a letra "f" identifica o ultimo pedaço "xaf", na tua linha de comando substitua o "f" pela letra que identifica o ultimo pedaço, tente com todo alfabeto [a-z]: cat xa[a-z] > arquivo_remontado Cuidado com esta simplificação, neste exemplo pega somente arquivos que iniciam com "xa" e terminem com letras entre "a e z", caso a divisão gere muitos arquivos o splite continua nomeaando os arquivos com xba, xca até xzz e a regra acima não vai pegar todos, caso a divisão gere muitos arquivos até criar pedaços com nomes que iniciam nome diferente de "xa", então elabore script pra remontar o arquivo e não utilize a regra acima. ls -la drwxrwxr-x 2 zago zago 4096 Ago 6 20:22 . drwx------ 7 zago zago 4096 Ago 6 20:18 .. -rw-rw-r-- 1 zago zago 8350478 Ago 6 20:22 wxPythonGTK-py2.3-2.4.0.7-1.i386.rpm -rw-rw-r-- 1 zago zago 1468000 Ago 6 20:18 xaa -rw-rw-r-- 1 zago zago 1468000 Ago 6 20:18 xab -rw-rw-r-- 1 zago zago 1468000 Ago 6 20:18 xac -rw-rw-r-- 1 zago zago 1468000 Ago 6 20:18 xad -rw-rw-r-- 1 zago zago 1468000 Ago 6 20:18 xae -rw-rw-r-- 1 zago zago 1010478 Ago 6 20:18 xaf Outra opção. cat xaa > wxPythonGTK-py2.3-2.4.0.7-1.i386.rpm cat xab >> wxPythonGTK-py2.3-2.4.0.7-1.i386.rpm cat xac >> wxPythonGTK-py2.3-2.4.0.7-1.i386.rpm e assim por diante, adicionar um por um. Dependendo do tipo de arquivo e como nomeou, pode tentar esta opção. cat x.* >> arquivo Onde x representa a parte inicial e comum do nome dos pedaços, algo como. cat arquivo.* >> arquivo Pode definir um prefixo para o nome dos arquivos que serão criados, exemplo para nomear os pedaços com part-aa, part-ab e etc.. Como exemplo, para dividir arquivo grande em pedaços de 600MB, ideal para gravar em CD. split -b 600000000 arquivo-grande Para nomear as partes com part-aa, part-ab...., basta acrescentar o prefixo no final. split -b 600000000 arquivo-grande part- Para remontar no destino use o "cat" como no exemplo acima: cat pedaco1 pedaco2 pedaco3 ... pedacoN > arquivo_remontado Por padrão os pedaços serão criados com nomes aa, ab, ac e assim por diante, pra sua organização voce pode nomear os pedaços no formato: arqpeq1-aa arqpeq1-ab arqpeq1-ac.... Quando tentar dividir mais de um arquivo no mesmo diretório ou sub-dividir os pedaços, fatalmente vai sobrescrever as partes ou ter dificuldade pra identificar quem é quem, indique um nome pra parte inicial dos pedaços, no exemplo abaixo a opção arqpeq- vai nomear os pedaços no formato: arqpeq-aa arqpeq-ab arqpeq-ac e assim por diante, onde arqpeq- pode ser qualquer nome, faça testes com este formato: split -b -b 600000000 arquivo-grande arqpeq- No destino, pra remontar: cat arqpeq-xa[a-z] > arquivo_remontado Transportar grandes arquivos via rede, em algumas situações arquivos maiores que 2GB não são copiados via rede, ftp e conforme o sistema de arquivos e montagem no NFS e etc... A solução pra estes casos é usar split pra dividir o arquivo em partes menores que 2GB, por exemplo 1.5 GB split -b 1500000000 arquivo-grande ou split -b 1500m arquivo-grande Pra transmitir via internet com modens ou ADSL com baixa taxa de upload, dividir em pedaçõs menores pra transmissão pode ser uma boa opção. splite usa nomes que vão de "xaa" para o primeiro pedaço até "xzz" para o ultimo pedaço, quando tentar dividir arquivo muito grande em pedaços pequenos ele não consegue nomear todos e retorna a mensagem de erro: split: Output file suffixes exhausted pra contornar divida em partes, pra depois dividir novamente, cuidado pra não inverter nomes e ordem, uma boa opção é nomear as partes pra não sobrescrever, por exemplo: split -b 80m minhaiso.iso part1- Este comando vai criar varias partes com o nome do arquivo iniciando com part1-, part1-aa part1-ab part1-ac e etc... depois aplique split novamente nestas partes, pra dividir part1-aa e nomear os pedaços com filho1aa- split -b 10m part1-aa filho1aa- Este comando vai criar varias partes com o nome do arquivo iniciando com filho1aa-, filho1aa-aa filho1aa-ab filho1aa-ac e etc.... Pra reconstruir o arquivo no destino, primeiro remonte os que iniciam com filho1aa pra reconstruir a part1-aa pra depois remontar os que iniciam com part pra reconstruir o arquivo original. Parece trabalho mas é uma solução, procure usar nomes que fique claro pra voce não se confundir ou inverter a ordem... Veja mais no manual man split info split ************************************** Dividir arquivo texto em linhas. Exemplo para dividir arquivogrande.txt em arquivos pequenos contendo 60 linhas cada. split --lines=60 arquivogrande.txt part- veja o resultado em part-aa, part-ab, part-ac. ************************************** tar + split Compactar arquivão, como exemplo um banco de dados, passar o resultado para split dividir em pates de 50MB, para depois enviar por FTP uma parte de cada vez. tar -czvf - arquivao.gdb | split -b 50m - part_ resultado. ls -la |awk '{print $5" "$8}' 1228107776 arquivao.gdb 52428800 part_aa 52428800 part_ab 52428800 part_ac 52428800 part_ad 52428800 part_ae 30668800 part_af Para gravar em CD altere o tamanho de 50m para 600m ************************************** rar SUSE 10.1 tem o pacote rar e unrar, instalar via smart. smart install rar smart install unrar quebrar arquivo (dividir) com rar No SUSE 10.1 não encontrei páginas do manul, mas executando rar sem parametros retorna uma lista de opções. rar ou rar --info v Create volumes with size autodetection or list all volumes v[k,b] Create volumes with size=*1000 [*1024, *1] e Extract files to current directory x Extract files with full path rv[N] Create recovery volumes Formato da linha de comando para dividir arquivo em pedaços de 600MB rar a -v600m arquivodestino arquivo-origem Onde -v600m define tamanho das partes do arquivo, 600m = 600MB rar a -v100m arqpequeno.rar arquivao.iso acrescenta part1, part2 ... no nome do arquivo, salva no diretório corrente. arqpequeno.part1.rar arqpequeno.part2.rar arqpequeno.part3.rar Extrar arquivos (juntando os pedaços), use unrar x primeiraparte.rar unrar x arqpequeno.part1.rar Isto mesmo, execute dentro do diretório onde estão todas as partes. Na linha de comando indique somente a primeira parte (part1), automaticamente busca as demais partes e reconstroi o arquivão original. Tem muitos tutoriais no google, pode iniciar pelo guia Foca. http://drill.com.br/tutorial/linux/intermediario/ch-cpctd.htm ************************************** 7zip http://p7zip.sourceforge.net/ ************************************** O comando split Muitas vezes precisamos dividir um arquivo em varios outros menores, seguindo alguma convencao. Para isto podemos usar tanto o comando split. O comando split nos permite dividir um arquivo baseando-se no numero de linhas ou numero de bytes que cada arquivo novo deve conter. Por exemplo: % split -l 10 /etc/passwd Este comando criara varios arquivos denominados xaa, xab, xac, etc. Nem sempre estes nomes sao os mais convenientes. Neste caso podemos, com o acrescimo de mais um parametro, determinar o sufixo do nome dos arquivos que serao criados: % split -l 10 /etc/passwd pas- % ls pas-aa pas-ab pas-ac pas-ad pas-ae pas-af pas-ag pas-ah Os arquivos criados passaram a conter o prefixo "pas-", permitindo identificar mais claramente os contadores dos arquivos (aa, ab, ac, etc.) Alem do particionamento em linhas, o comando split, quando invocado com a opcao "b", ira efetuar a divisao do arquivo baseando-se no numero de bytes: % split -b 32k /etc/passwd pas- ou entao % split -b 32 /etc/passwd pas- ou ainda % split -b 32m /etc/passwd pas- No primeiro exemplo, o arquivo /etc/passwd sera dividido em varios arquivos de 32kbytes cada um, ao passo que no segundo exemplo, o arquivo sera dividido em arquivos de 32 bytes cada. No terceiro exemplo, o arquivo /etc/passwd e dividido em arquivos de 32MB cada (pouco provavel :-) ---------------------------------------- ************************************** O comando csplit Outro comando tambem utilizado para se dividir um arquivo em varios outros e o comando csplit (Content Split). Ao contrario do comando split, abordado na dica anterior, o comando csplit permite que se especifique uma string que ira indicar o delimitador de cada um dos novos arquivos. Tomemos como exemplo o arquivo abaixo, chamado arq1: arq1 Capitulo 1 Era uma vez, era uma vez tres porquinhos, Palhaco, Palito e Pedrito. . Capitulo 2 E o Lobo Mau, ... Capitulo 3 E o cacador, matou o Lobo Mau, casou-se com a Chapeuzinho Vermelho, e viveram felizes para sempre. The End @@@ Fim arq1 O autor, colocou todos os capitulos do livro em apenas um arquivo e depois se arrependeu. Agora ele quer criar varios arquivos contendo um capitulo cada. O comando abaixo pode resolver este problema: % csplit -f Capit arq1 "/Capitulo/" {2} % ls -l total 4 -rw-r--r-- 1 queiroz supsof 0 Jun 17 18:31 Capit00 -rw-r--r-- 1 queiroz supsof 85 Jun 17 18:31 Capit01 -rw-r--r-- 1 queiroz supsof 29 Jun 17 18:31 Capit02 -rw-r--r-- 1 queiroz supsof 136 Jun 17 18:31 Capit03 -rw-r--r-- 1 queiroz supsof 250 Jun 17 18:11 arq1 Traduzindo, o comando csplit ira criar varios arquivos iniciados em "Capit", ate um maximo de 3 arquivos (parametro {2}, computa-se o numero entre colchetes + 1). Este valor indica o numero de vezes que o comando sera repetido. No nosso exemplo, foi especificado exatamente o numero de capitulos contidos no arquivo original (3). Caso nao conhecamos este valor, podemos especificar um numero que sabemos maior que o numero de arquivos existentes. O comando csplit ira reclamar, e apagar todos os arquivos ja criados. Para evitarmos que isto aconteca, basta especificar a flag "-k", ou seja, a reclamacao continuara sendo feita, mas o trabalho ja feito nao sera removido. O que nao pode e se especificar um numero inferior ao desejado. Neste caso, o comando ficaria como: % csplit -k -f Capit arq1 "/Capitulo/" {9} 0 85 29 csplit: {9} - out of range 136 A quebra sera feita, tomando-se por base o nosso exemplo, antes da string Capitulo, exclusive. Devido a isto, o primeiro arquivo, Capit00, esta vazio. Os arquivos criados, a excecao do arquivo Capit00 que esta vazio, contem: Capit01 Capitulo 1 Era uma vez, era uma vez tres porquinhos, Palhaco, Palito e Pedrito. ... Capit02 Capitulo 2 E o Lobo Mau, ... Capit03 Capitulo 3 E o cacador, matou o Lobo Mau, casou-se com a Chapeuzinho Vermelho, e viveram felizes para sempre. The End O comando csplit todavia, e um pouco complexo. Existe um programa de dominio publico chamado slice, que e muito mais flexivel e facil de usar que o comando csplit. O programa slice (e onde encontra-lo), sera abordado em breve nesta lista. ---------------------------------------------------------------- ************************************** O comando slice --------------------------------------------------------------------- Este comando incorpora toda a funcionalidade dos comandos split e csplit, abordados anteriormente. Ao contrario dos comandos split e csplit, o comando slice nao e padrao em sistemas Unix. Ele faz parte da distribuicao de utilitarios para unix, chamada unix-c, e disponivel, entre outros lugares, em http://ftp.unicamp.br/pub/unix-c. Os exemplos abaixo ilustram claramente o poder e facilidade de uso deste comando: 1) Divisao de um mailbox em varios arquivos contendo uma mensagem cada: % slice -f mailbox -m % ls mailbox:1995-05-02.14:28 mailbox:1996-12-10.10:04:47 mailbox:1995-05-24.13:35:43 mailbox:1997-02-06.09:00:15 mailbox:1995-05-24.13:40:04 mailbox:1997-02-26.09:42:23 Sao criados varios arquivos iniciados por "mailbox:" e os numeros que se seguem identificam a data da mensagem. 2) Divisao de um arquivo sempre que for encontrada a string "###". A string "###" deve ser eliminada (flag -x) dos arquivos resultantes: % slice -f arq1 -e "###" -x Alem disto, o nome dos arquivos gerados pode ser configurado atraves de algumas diretivas aceitas pelo comando slice. Caso o arquivo original contenha as linhas: arq1 ------------------------------------------------------------------------- ARQ1 abcdefghijklmno ------------------------------------------------------------------------- ARQ2 abcdefghijklmno ------------------------------------------------------------------------- ARQ3 abcdefghijklmno ------------------------------------------------------------------------- ARQ4 abcdefghijklmno ------------------------------------------------------------------------- ARQ5 abcdefghijklmno ------------------------------------------------------------------------- ARQ6 O comando abaixo % slice -f arq1 -e "------" -x x.#2 % ls arq1 x.ARQ1 x.ARQ2 x.ARQ3 x.ARQ4 x.ARQ5 x.ARQ6 Os arquivos gerados receberam o prefixo "x." e o sufixo e o segundo (#2) campo da linha que preencheu os requesitos para divisao dos arquivos, indicado pelo parametro (-e "------"), em nosso caso a string ARQx, onde x varia de 1 a 6. Este comando esta disponivel no servidor de ftp anonimo da Unicamp, em http://ftp.unicamp.br/pub/unix-c/file-mgmt/slice.tar.gz. ------------------------------------------------------- ************************************** Para dividir um arquivo chamado /tmp/grandearquivo para ser gravado em disquetes digite: split -b 1468000 /tmp/grandearquivo Dúvidas: Digite man split ************************************** Com o comando split voce pode especificar o tamanho dos volumes que vc quer que o arquivo seje divido...assim use $split -b 1440Kb ARQUIVO.XYZ onde ARQUIVO.XYZ é o teu arquivo. com isso serao gerados arquivos de 1.44Mb ate o total do original.mas nao compacta!!! para recuperar use cat: $cat XAA XAB XAC XAD>ARQUIVO.XYZ | | | | | | | | | +------> teu arquivo original | | | +-------------> 4º arquivo gerado | | +-----------------> 3º arquivo gerado | +---------------------> 2º arquivo gerado +-------------------------> 1º arquivo gerado nao sei agora como tu vai fazer pro ruindows.....nao sei se ajudei a te dar uma ideia mas valeu.......boa sorte... ******************************* De: Marcos Pawloski Responder A: Marcos Pawloski Para: Roberta Antunes Cc: linux-br@bazar2.conectiva.com.br Assunto: Re: (linux-br)Backup particionado corrompido Data: Thu, 2 Jun 2005 00:26:10 -0300 Já tentou, antes de mandar para o dvd, compactar seu arquivo com o bzip2 ? em determinados tipos arquivos(ex. txt) ele reduz o tamanho em até 10vezes... Eu uso o bzip2 qdo preciso e acho do caramba o algoritmo de compactação dele. Marcos Em 01/06/05, Roberta Antunes escreveu: > Tenho que fazer backup em um DVD, mas meu arquivo é maior. O DVD so > suporta 4G e meu arquivo tem 6G. Gostaria de saber se tem algum > comando ou ferramenta para que eu possa particionar isso no Linux sem > ser com o SPLIT, pois quando vou junta-los na restauracao sempre > mostra que algum arquivo esta corrompido e nao consigo concluir essa > restauracao. ******************************* De: Thiago Macieira Para: linux-br@bazar2.conectiva.com.br Assunto: Re: (linux-br)como gravar um arquivo grande em varios CD's... Data: Fri, 13 Jan 2006 09:13:35 -0200 -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 RedDevil wrote: >o que acontece eh que um Amigo meu tem um arquivo de 1.4 GB e precisa >copiar esse arquivo para CD's... > >alguem saberia me responder como se deve proceder para fazer isso? para >que, durante a copia do arquivo de 1.4 GB, quando ele ocupar todo o >tamanho, o espaço do primeiro CD, seja solicitado o segundo CD e a copia >continue nesse segundo CD, e assim por diante? Use o comando "split' para dividir o arquivo em duas partes e grave-as. Quando for usar, você terá que copiar a primeira metade para o disco, trocar de CD, copiar a segunda metade e juntá-las usando o programa de concatenação[1]. Não vejo outro jeito para um arquivo comum. Dependendo do programa que vá ler esse arquivo, podem existir outras maneiras de dividi-lo. Por exemplo, se for um .avi, recomendo usar o avisplit para dividir, ao invés do split. [1] /bin/cat - -- Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org PGP/GPG: 0x6EF45358; fingerprint: E067 918B B660 DBD1 105C 966C 33F5 F005 6EF4 5358 3. Ac seo woruld wearð geborod, swá se Scieppend cwæð "Gewurde Unix" and wundor fremede and him "Unix" genemned, þæt is se rihtendgesamnung. ******************************* De: Jorge Godoy Para: RedDevil Cc: linux-br@bazar2.conectiva.com.br Assunto: Re: (linux-br)como gravar um arquivo grande em varios CD's... Data: Fri, 13 Jan 2006 08:46:18 -0200 RedDevil writes: > alguem saberia me responder como se deve proceder para fazer isso? para que, > durante a copia do arquivo de 1.4 GB, quando ele ocupar todo o tamanho, o > espaço do primeiro CD, seja solicitado o segundo CD e a copia continue nesse > segundo CD, e assim por diante? O software usado tem que ter algum suporte a isso ou você tem que dividir o arquivo antes. Veja a documentação do comando split. -- Jorge Godoy ******************************* De: RedDevil Para: Antonio F. Zago Assunto: Re: (linux-br)como gravar um arquivo grande em varios CD's... Data: Tue, 31 Jan 2006 10:27:48 -0200 ola Mr. Zago. tudo bem contigo? sincerely espero que sim... ;o) RedDevil /* ----------------------------------------------------------------- */ para o FAQ: particionando um arquivo atraves do uso do tar/split: tendo esse arquivo ae abaixo, de 4,9 MB... ibet_2005.12.4.1_full.exe (4,9 MB) com o seguinte comando a gente splita ele, em multiplos arquivos de 1 MB: $ tar -cjvf - ibet_2005.12.4.1_full.exe | split -b 1m - surtur_ (Enter) e sao gerados os seguintes arquivos: surtur_aa (1 MB) surtur_ab (1 MB) surtur_ac (1 MB) surtur_ad (1 MB) surtur_ae (874 KB) depois, para restaurar novamente o arquivo original, primeiro, estando no diretorio no qual estao os arquivos que foram splitados, usa-se o seguinte comando: $ cat surtur_* > surtur.tar.bz2 (Enter) e eh gerado o arquivo ae abaixo, em sabor .tar.bz2... surtur.tar.bz2 (4,9 MB) e para finalizar, usa-se o seguinte comando para descompactar o arquivo .tar.bz2: $ tar -jxvf surtur.tar.bz2 (Enter) e esta feita a historia... o arquivo original eh restaurado no sabor e tamanho que tinha antes de ser splitado, conforme ae abaixo: ibet_2005.12.4.1_full.exe (4,9 MB) existe tambem o HJ-SPLIT (HJSpit.exe) de 174 Kbytes que não exige instalação, o qual permite quatro operações, numa tela gráfica: split, join, compare e checksum, sendo que a opçao split particiona o arquivo e o join recompoe (* obs: Mr. Zago, eu nao sei se esse programa eh para linux ou windows) /* ----------------------------------------------------------------- */ /* ******************************************************** */ *******************************