Dividindo arquivo em partes menores no Linux.

porplague70

Dividindo arquivo em partes menores no Linux.

Eu queria fazer o backup de alguns arquivos no Gmail, mas depois de juntá-los num tar.gz, o arquivo ficou grande demais para mandá-lo por email. Resolvi o problema dividindo o arquivo em partes menores e mandando-as individualmente.

Antes de mais nada, vamos juntar todos os arquivos em um tar. O ideal é que você crie uma pasta antes, pois quando for descompactar, os arquivos não serão jogados no diretório em que você está trabalhando, mas sim dentro dessa mesma pasta.
$ mkdir backup

Agora copie todos os arquivos que você quer fazer o backup para essa pasta. Se quiser, pode criar novas pastas dentro dessa.
$ cp arquivo1 arquivo2 arquivo3 ... backup

Depois disso, criaremos o tar. Você pode simplesmente criá-lo, ou também compactá-lo com o gzip ou o bzip2. Existem outras opções também, mas essas são as mais comuns. O bzip2 compacta melhor, mas é um pouco mais lerdo.
$ tar -cvf backup.tar backup # sem compactação
$ tar -zcvf backup.tar.gz backup # gzip
$ tar -jcvf backup.tar.bz2 backup # bzip2

Pode ser que você queira ver de que tamanho ficou o tar e ver se vai precisar dividi-lo ou não.
$ ls -lh | grep backup

Para dividi-lo, usaremos o split. No Archlinux ele vem no pacote coreutils, então é praticamente certeza que ele estará instalado. De maneira geral, ele será utilizado da seguinte forma:
$ split -b tamanho_individual arquivo_de_origem prefixo

Assim ele dividirá o arquivo_de_origem em arquivos de tamanho_individual (em bytes, ou você pode usar algum sufixo de tamanho) cada e com o nome prefixoaa, prefixoab, prefixoac… Eu usei algumas opções a mais, no fim ficou assim:
split -a 1 -b 9MB -d --verbose backup.tar.gz backup.tar.gz.

  • O -a 1 modifica os identificadores após o prefixo, então ao invés de backup.tar.gz.aa, eu terei backup.tar.gz.a.
  • O -d usa números no lugar de letras depois do prefixo, então no fim eu fiquei com backup.tar.gz.0, 1, 2, etc.(lembrando que se colocar 1 quando a contagem chegar em 9 ele para de fazer.)

Esse passo não é destrutivo. Em outras palavras, ele não apagará o arquivo original.

Para juntar usaremos o cat. Você pode primeiro reconstituir o arquivo original e então descompactá-lo, ou usar um pipe direto do cat para o tar. Vamos criar um novo diretório antes para evitar confusões com nome de arquivos antes.
$ mkdir tmp && mv backup.tar.gz.* tmp && cd tmp
$ cat backup.tar.gz.* > backup.tar.gz #reconstitui o arquivo e
$ tar -xvzf backup.tar.gz # descompacta o arquivo. ou
$ cat backup.tar.gz.* | tar -xvz # usa o pipe

Só se lembre de na hora de descompactar usar as opções certas, -z para gzip, -j para bzip2 e nada para apenas tar. Perceba também que no primeiro caso usamos -xvzf porque descompactamos um arquivo, no segundo não usamos o -f porque o tar está lendo do stdin.

Sobre o Autor

plague70 administrator

Deixe uma resposta