split -b 10M -d archive.tar.gz archive.tar.gz.part- corta um arquivo em pedaços de 10 MB, e cat archive.tar.gz.part-* > restored.tar.gz junta tudo de volta. Tamanhos iguais não provam nada — a única checagem honesta é comparar somas de verificação, e existe uma flag que perde dados sem falhar.
1. Corte por tamanho
$ clai divida o archive.tar.gz em pedaços de 10 megabytes→ split -b 10M -d archive.tar.gz archive.tar.gz.part-10485760 archive.tar.gz.part-0010485760 archive.tar.gz.part-014028480 archive.tar.gz.part-02
-b 10M é o tamanho do pedaço e -d pede sufixos numéricos em vez de letras. O último pedaço é menor, e isso é esperado. O comando em si não imprime nada — os tamanhos acima vêm do ls -l.
2. Junte de volta
$ clai junte o arquivo de volta a partir dos pedaços→ cat archive.tar.gz.part-* > restored.tar.gz
Não existe um comando "unsplit": o truque inteiro é o cat na ordem do glob. É justamente por isso que os sufixos importam — tanto os numéricos quanto os de letras que o split gera sempre ordenam certo.
3. Prove que o resultado é idêntico
$ clai verifique se o arquivo juntado bate com o original→ sha256sum archive.tar.gz restored.tar.gz93f9298124fc680c archive.tar.gz93f9298124fc680c restored.tar.gz
Os hashes foram encurtados para 16 caracteres para caber numa linha. Tamanhos iguais não são prova: um byte trocado dentro de um pedaço não muda tamanho nenhum.
4. Por quantidade em vez de por tamanho
$ clai divida o arquivo em exatamente três partes→ split -n 3 -d archive.tar.gz piece-8333334 piece-008333333 piece-018333333 piece-02
-n divide em partes iguais e dá o resto para a primeira. Útil quando você espalha um arquivo por três discos, e não quando tenta caber num limite de upload.
5. Deixe uma soma para quem for juntar
$ clai salve a soma de verificação ao lado do arquivo→ sha256sum archive.tar.gz > archive.tar.gz.sha256
Depois de juntar, o outro lado roda sha256sum -c archive.tar.gz.sha256 e recebe archive.tar.gz: OK. Num arquivo corrompido aparece archive.tar.gz: FAILED mais sha256sum: WARNING: 1 computed checksum did NOT match, com saída 1 — verificado trocando um único byte dentro do segundo pedaço.
6. A armadilha: sufixo de tamanho fixo
$ clai divida o arquivo em pedaços de 200 kilobytes com sufixos de dois dígitos→ split -b 200k -d -a 2 archive.tar.gz fixed-split: output file suffixes exhausted⚠ CAUTION — falta parte do arquivo e o código de saída continua 0
Verificado: -a 2 permite 100 nomes, o arquivo precisa de 123 pedaços, então o split grava 100 arquivos, imprime o erro e sai com 0 mesmo assim. Sem -a ele estende o sufixo sozinho — os nomes vão de small-00 a small-89 e depois small-9000 — e a ordem de junção continua correta, o que os hashes confirmam.
Gotchas
- Tamanhos iguais não provam nada. O único critério honesto é a soma do original contra a do arquivo juntado.
-acom tamanho fixo perde dados calado. O erro é impresso, mas o código de saída é 0, então o script segue tranquilo com um conjunto incompleto de pedaços. Ou deixe o-ade fora, ou calcule a quantidade de pedaços antes.- Um pedaço não é um arquivo compactado.
archive.tar.gz.part-00é o primeiro terço de um arquivo, não um arquivo pequeno. Junte primeiro, extraia depois — otarnum pedaço solto só vai reclamar de fim de arquivo inesperado.
Related questions
Como divido por linhas em vez de bytes? split -l 100000 big.csv part- corta nas quebras de linha, que é o que você quer para texto e logs.
O split pode compactar ao mesmo tempo? Não — primeiro tar czf, depois divida o arquivo pronto. A ordem inversa gera pedaços que ferramenta nenhuma lê.
E se o outro lado usa Windows? Lá se junta com copy /b part-00+part-01+part-02 archive.tar.gz. O que importa é a ordem dessa lista.
See also
- Extrair qualquer arquivo compactado
- Retomar um download interrompido com curl
- Copiar arquivos preservando a estrutura de pastas
O CliAI escreve a divisão, a junção e a checagem de soma a partir de uma frase, e mostra cada comando antes de rodar. Instale em uma linha.