Comando split: Dividindo e Juntando Arquivos Grandes
E Se o Arquivo For Grande Demais?
split. Ele corta um arquivo grande em pedacos pequenos que voce pode juntar novamente depois, exatamente como estavam. Vamos ver como funciona.O Que Voce Vai Aprender
- Como dividir um arquivo grande por tamanho, linhas ou quantidade de pedacos com
split - Como juntar os pedacos de volta no arquivo original com
cat - Como usar sufixos numerados (
part_01em vez dexaa) - Como verificar se o arquivo esta intacto apos dividir e juntar
1. O Que e o Comando split?
Conclusao: split quebra um arquivo em varios arquivos menores; concatena-los com cat restaura o original byte a byte.
split apenas corta uma copia em pedacos; o original permanece intocado. E quando voce junta os pedacos na ordem, obtem o original de volta sem perder um unico byte.Primeiro, crie um arquivo para praticar.
# Criar um arquivo dummy de 50MB $ dd if=/dev/zero of=bigfile.dat bs=1M count=50
$ ls -lh bigfile.dat
-rw-r--r-- 1 user user 50M Jun 5 10:00 bigfile.dat
2. Como Dividir por Tamanho
Conclusao: Use
split -b TAMANHO arquivo prefixo.-b 100Mcria pedacos de 100MB,-b 10Mcria pedacos de 10MB.
-b (de bytes). O part_ no final e o prefixo adicionado ao inicio de cada nome de arquivo de saida.$ split -b 10M bigfile.dat part_
$ ls -lh part_*
-rw-r--r-- 1 user user 10M Jun 5 10:01 part_aa -rw-r--r-- 1 user user 10M Jun 5 10:01 part_ab -rw-r--r-- 1 user user 10M Jun 5 10:01 part_ac -rw-r--r-- 1 user user 10M Jun 5 10:01 part_ad -rw-r--r-- 1 user user 10M Jun 5 10:01 part_ae
part_aa, part_ab... com as letras aumentando.xaa, xab... As unidades de tamanho sao K, M, G. Note que 10M significa 10x1024x1024 bytes, enquanto 10MB significa 10x1000x1000 bytes.Guia pratico de tamanhos
split -b 700M-> cabe em um CDsplit -b 100M-> tamanho facil para upload na nuvemsplit -b 1G-> 1GB por pedaco
3. Como Dividir por Numero de Linhas
Conclusao: Para texto e logs,
split -l LINHAS arquivo prefixodivide nos limites das linhas, para que nenhuma linha seja cortada ao meio.
-l (de linhas). Dividir por tamanho pode cortar uma linha bem no meio, mas -l sempre quebra no limite da linha. Muito mais seguro para CSV e logs.$ split -l 1000 access.log chunk_
$ wc -l chunk_*
1000 chunk_aa
1000 chunk_ab
342 chunk_ac
2342 total
A divisao por tamanho (-b) corta mecanicamente em um offset de bytes, entao em um arquivo de texto uma linha pode ser dividida entre dois pedacos. Quando o significado da linha importa, sempre use -l.
4. Como Dividir em um Numero Fixo de Pedacos
Conclusao:
split -n QUANTIDADE arquivo prefixodivide o arquivo em exatamente essa quantidade de pedacos iguais.
-n (de numero). Ele divide o arquivo inteiro em 5 partes iguais, entao voce nao precisa calcular tamanhos.$ split -n 5 bigfile.dat group_
$ ls -lh group_*
-rw-r--r-- 1 user user 10M Jun 5 10:05 group_aa -rw-r--r-- 1 user user 10M Jun 5 10:05 group_ab -rw-r--r-- 1 user user 10M Jun 5 10:05 group_ac -rw-r--r-- 1 user user 10M Jun 5 10:05 group_ad -rw-r--r-- 1 user user 10M Jun 5 10:05 group_ae
5. Como Juntar os Pedacos de Volta
Conclusao: Nenhum comando especial e necessario.
cat prefixo* > arquivo_restauradoconcatena os pedacos na ordem para reconstruir o original.
join, mas ele serve para juntar colunas de tabelas - completamente diferente. Para remontar pedacos do split, voce usa cat.cat que exibe arquivos?cat tambem concatena multiplos arquivos na ordem. Redirecione com > para escrever o resultado em um arquivo, e pronto.$ cat part_* > restored.dat
$ ls -lh restored.dat
-rw-r--r-- 1 user user 50M Jun 5 10:10 restored.dat
Atencao com a ordem. O curinga * em cat part_* expande em ordem alfabetica, entao part_aa -> part_ab -> ... fica correto. Mas se voce nomear arquivos com numeros simples como part_1, part_2, ... part_10, entao part_10 pode ser ordenado antes de part_2. Use a numeracao com zeros a esquerda da proxima secao para se manter seguro.
6. Como Usar Sufixos Numerados
Conclusao:
-dgera sufixos numericos (00,01...),-adefine a quantidade de digitos, e--additional-suffixadiciona uma extensao.
01, 02 do que aa, ab - e mais claro.-d (de digitos) para obter numeros. Defina a largura com -a, e voce pode ate adicionar uma extensao como .part com --additional-suffix.$ split -b 10M -d -a 2 --additional-suffix=.part bigfile.dat backup_
$ ls backup_*
backup_00.part backup_01.part backup_02.part backup_03.part backup_04.part
Com numeros preenchidos com zeros (00, 01, ... 10, 11), cat backup_*.part > restored.dat sempre junta na ordem correta. Se voce espera mais de 100 pedacos, use -a 3 para tres digitos.
7. Como Verificar Se o Arquivo Esta Intacto
Conclusao: Compare os hashes
sha256sumantes e depois. Valores iguais provam que o arquivo foi restaurado byte a byte.
sha256sum. E uma especie de "impressao digital" calculada a partir do conteudo do arquivo. Se o arquivo original e o restaurado tiverem a mesma impressao digital, sao identicos. Tambem detecta corrupcao durante transferencia ou copia.$ sha256sum bigfile.dat restored.dat
e3b0c44298fc1c149afbf4c8996fb924... bigfile.dat e3b0c44298fc1c149afbf4c8996fb924... restored.dat
Mini Exercicio (clique para abrir)
Crie um arquivo de 30MB chamado practice.dat, depois (1) divida-o em pedacos de 7MB, (2) junte-os com cat, e (3) confirme que o hash corresponde ao original.
Dica: dd if=/dev/zero of=practice.dat bs=1M count=30 -> split -b 7M practice.dat p_ -> cat p_* > joined.dat -> sha256sum practice.dat joined.dat
8. Armadilhas Comuns e Solucoes
Conclusao: A maioria dos problemas vem da ordem de juncao, confusao de unidades ou falta de espaco em disco. Verifique a capacidade e as unidades antes de dividir.
| Sintoma | Causa | Solucao |
|---|---|---|
| Arquivo juntado esta corrompido | Ordem de juncao errada | Use -d com zeros e cat ...* |
| Mais/menos pedacos que o esperado | M (1024) vs MB (1000) |
Use uma unidade consistentemente |
No space left on device |
Dividir precisa de ~2x o espaco | Verifique espaco livre com df -h primeiro |
| Linhas de texto cortadas ao meio | Voce usou -b (bytes) |
Divida novamente com -l (linhas) |
Nao faca isso
- Deletar o original antes de testar a juncao
- Pular a verificacao de hash
- Iniciar uma divisao sem verificar o espaco livre