Recentemente tive que copiar um arquivo de quase 6 GB entre dois computadores que utilizo. Esses computadores não estavam perto um do outro, muito menos na mesma rede. Solução simples: utilizar um pendrive.
Meu celular tem espaço na memória interna suficiente para copiar o arquivo, porém para minha surpresa não consegui copiar o arquivo inteiro. Quando vi a mensagem de erro lembrei que o sistema de arquivos do celular é FAT, com o limite do tamanho em quase 4GB. Ou seja, o tamanho do arquivo é maior que o suportado pelo sistema de arquivos.
Como trocar o sistema de arquivos não era a opção, procurei como dividir o arquivo em partes. A solução é extremamente simples, basta utilizar o comando split
. Este comando permite dividir o arquivo baseado em alguns critérios como bytes e número de linhas. Meu caso como é um arquivo binário e o que me interessava era o tamanho, fiz a divisão por bytes.
O comando utilizado foi:
split -b 1G arquivo-original prefixo-das-partes
Explicando, -b
diz para o split
dividir por bytes e que cada parte terá 1GB. arquivo-original
é o arquivo que desejo dividir. prefixo-das-partes
é o nome dado a cada parte, seguido de sua numeração, caso seja arquivo.
serão criados vários arquivos como arquivo.aa
, arquivo.ab
e assim por diante. Se quiser números em vez de letras basta adicionar o parâmetro -d
no comando.
Não foi o meu caso, porém se tiver um arquivo de texto grande, como um log, e quiser dividi-lo, basta utilizar o parâmetro -l 1000
que gerará arquivos de 1000 linhas cada, sem o risco de dividir alguma linha em dois arquivos.
Com cinco arquivos de 1GB e outro de aproximadamente 700MB, finalmente foi copiado para o celular.
Porém ainda precisava juntar as partes no destino, que bastou um:
cat prefixo-das-partes* > arquivo-original
Explicando, o cat
recebeu o nome de todas as partes por causa do “*”, que também foram passadas como argumento na ordem correta, mesma coisa que executar um cat arquivo.aa arquivo.ab ... > arquivo
. E assim recuperando o arquivo original.
O cat
também funciona com arquivos de texto dividido pelo número de linhas. Se quiser dividir vários arquivos basta gerar um “.tar.gz” ou “.tar.bz2” antes.