Comando split: Dividindo e Juntando Arquivos Grandes
O que você vai conseguir fazer
- Dividir um arquivo por tamanho, número de linhas ou quantidade de pedaços com `split`
- Reconstruir o original com `cat prefixo* > arquivo_restaurado`
- Verificar o arquivo restaurado com `sha256sum`
Pré-requisitos (leia estes primeiro)
E Se o Arquivo For Grande Demais?
split. Ele corta um arquivo grande em pedaços pequenos.As palavras usadas aqui (para não confundir depois)
- Dividir: cortar um arquivo em vários arquivos menores. O original continua onde está.
- Juntar: recolocar os pedaços em ordem para reconstruir o arquivo original.
- Prefixo: o texto colocado no início de cada nome de arquivo gerado.
- Sufixo: os caracteres colocados no fim do nome. O
aaempart_aaé um deles. - Hash: um texto parecido com uma impressão digital, calculado a partir do conteúdo do arquivo. "Checksum" quer dizer quase o mesmo.
O Que Você Vai Aprender
- Como dividir um arquivo grande por tamanho, linhas ou quantidade de pedaços com
split - Como juntar os pedaços de volta no arquivo original com
cat - Como usar sufixos numerados (
part_01em vez dexaa) - Como verificar se o arquivo está intacto após dividir e juntar
1. O Que é o Comando split?
Conclusão: split quebra um arquivo em vários arquivos menores; concatená-los com cat restaura o original byte a byte.
split lê o conteúdo e escreve em arquivos novos. O original continua intocado.Primeiro, crie um arquivo para praticar.
# Criar um arquivo de treino de 50MB (so zeros por dentro) $ head -c 50M /dev/zero > bigfile.dat
O /dev/zero é um arquivo especial que entrega zeros sem parar. O head -c 50M pega apenas os primeiros 50MB, e o > grava isso em bigfile.dat.
Muitos artigos escrevem isso com o comando dd. O dd recebe o destino no of=.
Aqui evitamos o dd. Escrever o nome de um disco no of= sobrescreve aquele disco direto. Não há lixeira nem pergunta de confirmação, e a máquina pode parar de iniciar.
Com o head -c, o destino só pode ser um arquivo comum. Fique com essa forma enquanto você está começando.
$ ls -lh bigfile.dat
-rw-r--r-- 1 user user 50M Jun 5 10:00 bigfile.dat
2. Como Dividir por Tamanho
Conclusão: Use
split -b TAMANHO arquivo prefixo.-b 100Mcria pedaços de 100MB,-b 10Mcria pedaços de 10MB.
-b, que vem de bytes.part_ no final é o prefixo. Ele entra no início de cada nome de arquivo gerado.$ 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, e assim por diante.K, M e G.10M significa 10x1024x1024 bytes, enquanto 10MB significa 10x1000x1000 bytes. As duas contas são diferentes.Guia prático de tamanhos
split -b 700M-> cabe em um CDsplit -b 100M-> tamanho fácil para upload na nuvemsplit -b 1G-> 1GB por pedaço
3. Como Dividir por Número de Linhas
Conclusão: Para texto e logs,
split -l LINHAS arquivo prefixodivide nos limites das linhas, para que nenhuma linha seja cortada ao meio.
-l, que vem de linhas.-l sempre quebra no limite da linha.$ split -l 1000 access.log chunk_
$ wc -l chunk_*
1000 chunk_aa
1000 chunk_ab
342 chunk_ac
2342 total
A divisão por tamanho com -b olha apenas a contagem de bytes. Em um arquivo de texto, isso pode deixar uma linha partida entre dois pedaços.
Quando o significado de cada linha importa, use sempre o -l.
4. Como Dividir em um Número Fixo de Pedaços
Conclusão:
split -n QUANTIDADE arquivo prefixodivide o arquivo em exatamente essa quantidade de pedaços iguais.
-n, que vem de número.$ 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
O -n 5 divide pela contagem de bytes, então em um arquivo de texto ele corta linhas ao meio.
Para obter 5 pedaços mantendo as linhas inteiras, escreva split -n l/5. O l vem de line, linha.
$ split -n l/5 access.log group_
5. Como Juntar os Pedaços de Volta
Conclusão: Nenhum comando especial é necessário.
cat prefixo* > arquivo_restauradoconcatena os pedaços na ordem para reconstruir o original.
join, mas ele junta colunas de tabelas. É uma ferramenta completamente diferente.split, você usa o cat.cat que exibe arquivos?cat também concatena vários arquivos na ordem.> para escrever 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
Atenção com a ordem. O * em cat part_* expande comparando os nomes como texto.
O aa, ab e ac que o split gera têm sempre a mesma largura, então a ordem sai correta.
Mas se você mesmo nomear os arquivos como part_1, part_2, ... part_10, o part_10 vem antes do part_2. Use a numeração com zeros à esquerda da próxima seção para ficar seguro.
6. Como Usar Sufixos Numerados
Conclusão:
-dgera sufixos numéricos (00,01...),-adefine a quantidade de dígitos, e--additional-suffixadiciona uma extensão.
01, 02 do que aa, ab - é mais claro.-d para obter números. Ele vem de dígitos.-a. E o --additional-suffix ainda permite acrescentar uma extensão como .part.$ 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 números preenchidos com zeros, o cat backup_*.part > restored.dat sempre junta na ordem correta. Isso porque 00, 01, ... 10, 11 têm todos a mesma largura.
Se você espera mais de 100 pedaços, use -a 3 para três dígitos.
7. Como Verificar Se o Arquivo Está Intacto
Conclusão: Compare os hashes
sha256sumantes e depois. Valores iguais provam que o arquivo foi restaurado byte a byte.
sha256sum. É uma impressão digital calculada a partir do conteúdo do arquivo.$ sha256sum bigfile.dat restored.dat
9f2c7b1a4e6d8035c1af52e0b73d94e6... bigfile.dat 9f2c7b1a4e6d8035c1af52e0b73d94e6... restored.dat
(O hash depende do conteúdo do arquivo. O valor acima só mostra o formato da saída.)
8. Lina Tropeça: Números Próprios Quebram a Ordem
Conclusão: O
*expande comparando os nomes como texto. Números colocados por você, sem zeros à esquerda, quebram a ordem da junção.
part_1 a part_10. Depois de juntar, o conteúdo estava quebrado.Vamos ver o que aconteceu com um exemplo pequeno.
$ touch part_1 part_2 part_10 $ ls part_*
part_1 part_10 part_2
part_10 vem antes do part_2. O tamanho do número é ignorado.* compara os nomes como texto, da esquerda para a direita. Na comparação entre 1 e 2, o part_10 já fica decidido em primeiro.cat part_* > restored.dat junta nessa ordem?-d -a 2. Com part_01, part_02 e part_10 na mesma largura, comparar como texto já dá a ordem certa.O aa, ab e ac que o split gera também têm a mesma largura. Enquanto você não renomear nada, esse acidente de ordem não acontece.
Na dúvida, rode o sha256sum depois de juntar. Valores iguais provam que a ordem e o conteúdo estão corretos.
9. Armadilhas Comuns e Soluções
Conclusão: A maioria dos problemas vem da ordem de junção, confusão de unidades ou falta de espaço em disco. Verifique a capacidade e as unidades antes de dividir.
| Sintoma | Causa | Solução |
|---|---|---|
| Arquivo juntado está corrompido | Ordem de junção errada | Use -d com zeros e cat ...* |
| Mais/menos pedaços que o esperado | M (1024) vs MB (1000) |
Use uma unidade consistentemente |
No space left on device |
Dividir precisa de ~2x o espaço | Verifique espaço livre com df -h primeiro |
| Linhas de texto cortadas ao meio | Você usou -b (bytes) |
Divida novamente com -l (linhas) |
Faça sempre isso, antes e depois de dividir
- Teste a junção antes de apagar o original
- Compare os hashes com o
sha256sumdepois de juntar os pedaços - Verifique o espaço livre com
df -hantes de começar a dividir
O split e o sha256sum ainda não existem no terminalUm programa interativo que interpreta os comandos digitados e os executa. virtual deste site. Teste os exemplos deste artigo no seu próprio Linux ou terminal.
Apague o original apenas depois que a junção e a verificação de hash derem certo. Diferente de um ambiente gráfico, o rm não manda os arquivos para a lixeira. Eles somem na hora.
10. Mini Exercícios: Tente Você Mesmo
Conclusão: Três exercícios -- dividir por linha, juntar e conferir o hash -- percorrem o caminhoUma sequência de texto que descreve a localização de um arquivo ou diretório. completo na prática.
$ mkdir -p ~/split-practice && cd ~/split-practice $ seq 1 25 > numbers.txt
Tarefa 1: Divida numbers.txt em pedaços de 10 linhas e confira a contagem de linhas.
Ver dica 1 (direcionamento)
Divida pelo número de linhas, e não pelo tamanho. Use a opção que respeita o limite das linhas.
Ver dica 2 (nome do comando)
Você precisa do split e do wc. O split tem uma opção que divide pela contagem de linhas.
Ver a resposta
$ split -l 10 numbers.txt num_ $ wc -l num_*
10 num_aa 10 num_ab 5 num_ac 25 total
São 25 linhas divididas de 10 em 10, então só o último pedaço fica com 5.
Tarefa 2: Junte os pedaços de volta em um arquivo chamado joined.txt.
Ver dica 1 (direcionamento)
Não é preciso nenhum comando especial. Use aquele que concatena vários arquivos na ordem.
Ver dica 2 (nome do comando)
O comando é o cat. O símbolo que grava a saída em um arquivo apareceu na seção 5.
Ver a resposta
$ cat num_* > joined.txt $ wc -l joined.txt
25 joined.txt
De volta às 25 linhas do original.
Tarefa 3: Confirme que numbers.txt e joined.txt são exatamente iguais.
Ver dica 1 (direcionamento)
A mesma contagem de linhas não prova o mesmo conteúdo. Compare a impressão digital calculada de cada arquivo.
Ver dica 2 (nome do comando)
O comando é o sha256sum. Ele aceita dois nomes de arquivo lado a lado.
Ver a resposta
$ sha256sum numbers.txt joined.txt
Se as strings longas da esquerda forem iguais nas duas linhas, o conteúdo bate exatamente.
Quando terminar o treino, dá para remover o diretório inteiro. Olhe o conteúdo antes de apagar.
$ cd ~ $ ls ~/split-practice $ rm -r ~/split-practice
O rm -r apaga o diretório junto com tudo que está dentro dele. Confirme que o caminho é mesmo ~/split-practice antes de executar.
11. Revisão
split corta e o cat reconstrói. Não entra nenhum comando dedicado de junção.-b por tamanho, -l por linhas e -n por quantidade de pedaços.-l, porque assim nenhuma linha é cortada ao meio.sha256sum. Com esse hábito, dá para apagar o original com confiança.Resumo de Hoje em 3 Linhas
- O
splitcorta o arquivo e ocat prefixo* > arquivo_restauradoreconstrói -bpara tamanho,-lpara linhas,-npara quantidade de pedaços. Texto e log pedem-l- Depois de juntar, compare com
sha256sume só apague o original quando os valores baterem