Como dividir arquivos maiores em partes menores?


189

Eu tenho um arquivo grande (8 GB por exemplo). Como posso dividi-lo em várias partes, digamos 3 partes iguais, e depois como integrá-las mais tarde?



Você tem certeza de "Isso parece ser" ?. Caramba, é exatamente a mesma coisa. Exceto aqui, agora há um bônus de "Mais exemplos e alternativas".
18711 Luis Alvarado

Pode ajudar se você disser mais sobre por que deseja dividi-lo e se deseja dividi-lo apenas em substrings de bytes ou se você está disposto a envolvê-los em qualquer tipo de verificação ou identificação de erros. Se é para colocá-lo em mídia menor ou para transferências de rede, eu consideraria algo par2 .
poolie 29/07


um liner para dividir igualmente por N: (1.) dividido por linhas divididas - linhas $ (($ (wc -l <$ {nome_do_arquivo}) / $ {N})) $ {nome_do_arquivo} (2.) dividido por bytes divididos - bytes $ (($ (wc -c <$ {nome_do_arquivo}) / $ {N})) $ {nome_do_arquivo} #
Trevor Boyd Smith

Respostas:


272

Existem várias maneiras de conseguir isso. Vamos começar com os básicos.

Usando os comandos split e cat :

Vamos dizer que tenho uma imagem e é muito grande (10 MB). Tudo o que faço é:

split --bytes=1M /path/to/image/image.jpg /path/to/image/prefixForNewImagePieces

e então para montar, eu uso cat:

cat prefixFiles* > newimage.jpg

Por exemplo:

Supondo que estou dentro da pasta onde está a imagem:

split --bytes=1M myimage.jpg new

se a imagem estiver dentro de um diretório chamado images, você também poderá fazer isso:

split --bytes=1M images/myimage.jpg new

Se a imagem estiver dentro do diretório / home / cyrex / images, você poderá fazer isso:

split --bytes=1M /home/cyrex/images/myimage.jpg new

(Em todos os casos acima, irá dividir myimage.jpgem pedaços de 1MB e prefixar o nome das peças com a palavra nova. Então, eles seria semelhante newaa, newab, newac, newad...)

Se você estiver dividindo um arquivo de texto e quiser dividi-lo por linhas, faça o seguinte:

split -l 1000 book.txt new

O que dividirá o arquivo de texto em arquivos de saída de 1000 linhas cada. Esta é outra maneira de dividir um arquivo e é usada principalmente para arquivos de texto como logs, dumps sql, arquivos csv, etc.

Então eu mesclo eles

cat new* > newimage.jpg

Essa é uma maneira. Você pode até mudar o tamanho das peças divididas. Basta alterar a parte que diz --bytes=1Mque --bytes=1Kpara 1 kilobyte ou 1G para giga, ou outro número, como --bytes=4Kpor pedaços de 4KB.

Usando o Nautilus

Outra maneira é a opção de compactação no gui do Nautilus. Ele oferece a opção de dividir o arquivo ou arquivos que você deseja compactar em tamanhos menores de megabytes. É simples e fácil.

Ainda outra maneira é usar 7z

Supondo que você tenha uma imagem ISO chamada, ubuntu.isovocê pode fazer o seguinte:

7z a -v5m -mx0 ubuntu.7z ubuntu.iso

Isso criará arquivos de tamanho de 5 MB a partir do ubuntu.iso. O -v5mé o tamanho do volume para que você possa alterá-lo para 10, 12, 1, 3 e também m para k para kilobytes, etc; o -mx0switch diz ao 7-Zip para não usar compactação, ou seja, apenas para dividir os dados em partes.

Para extrair basta fazer

7z x ubuntu.7z.001

Dessa maneira, você extrai o primeiro arquivo e o 7z inicia a extração dos seguintes arquivos em ordem. Você também pode fazer

7z e ubuntu.7z.001

que tem o mesmo efeito aqui.


2
Não incluiu rar, pois ainda não é de código aberto (até onde eu sei) e não adicionou Tar, pois estava procurando maneiras fáceis de fazer a divisão.
18711 Luis Alvarado

Adicionar gzip bem - 7zip requer um pacote de instalação IIRC
Broam

Pelo que sei, o Gzip (como o tar) não tem uma opção fácil para dividir o arquivo compactado. Em todos os casos, eu os vi usando o comando split para "dividir" o arquivo compactado. Portanto, não seria um comando, mas um grupo de comandos para atingir um único objetivo, que pode ser realizado com um único, como split ou 7z. Para a instalação do 7Zip (que é o pacote p7zip do p7zip-full), ele nunca me pediu o iirc;).
Luis Alvarado

Adicionada divisão de arquivos de texto. Esqueci disso e hoje aconteceu que eu precisava dividir alguns arquivos CSV. Isso é para aqueles dumps que você precisa ter em uma quantidade específica de linhas.
18711 Luis Alvarado

10

Usando split -bcom o número apropriado, você pode obter três peças.

O número pode ser:

size=$(wc -c <"file name")
one_third=$((size/3+1))

Para remontar, use cat

cat "file name"* > "file name"

As páginas do manual ajudarão a preencher os detalhes.


11
Você também pode usar split --numberpara permitir splitcalcular o número de arquivos para você: askubuntu.com/questions/54579/…
Ciro Santilli

4

HJSplit

É um programa freeware popular para dividir e recombinar arquivos. O programa está disponível no Windows, Linux e em uma variedade de outras plataformas.

O HJSplit for Linux é um separador de arquivos freeware para Linux com interface gráfica completa. O HJSplit suporta tamanhos de arquivo acima de 100 Gigabytes, Dividir, Unir / Recombinar, somas de verificação MD5, comparar arquivos, "executar sem instalar" e o programa é totalmente portátil.

O HJSplit para Linux não precisa ser instalado e não depende de nenhuma biblioteca especial. Apenas extraia o arquivo hjsplitlx.tar.gz em um diretório de sua escolha e inicie o programa a partir do gerenciador de arquivos Linux ou de uma janela do terminal. Pode ser necessário ajustar as permissões de arquivo do programa para 'executável'.

insira a descrição da imagem aqui


11
Devo dizer que o arquivo do Windows também funciona no Linux.
Uri Herrera

2
Existem várias maneiras de dividir / ingressar em um arquivo antes de ter que ir para um programa como este. Prefiro usar as opções poderosas que o linux oferece e, para dividir / mesclar arquivos, ele tem algumas maneiras rápidas e seguras de fazê-lo.
18711 Luis Alvarado

3
É seguro, rápido, e é multi-plataforma que inclui LINUX, não é um exclusivo do Windows aplicativo que só acontece de ser executado em Linux também ...
Uri Herrera

2
Eu uso o HJSplit, é ótimo e simples. Não é necessário digitar comandos e nomes de parâmetros quando você pode simplesmente preencher os valores dos parâmetros em caixas de texto.
Mateus Leia

2
E ser um download gratuito piora porque? e devo dizer que EM QUALQUER LUGAR DO OP ELE PEDE SOFTWARE GRATUITO (que é gratuito) e ao que você está se referindo se chama OPEN, há uma diferença que você sabe?
Uri Herrera


3

HOZ - Hacha Open Zource v1.65 - http://hoz.sourceforge.net/

insira a descrição da imagem aqui

Do desenvolvedor:

OZ é o que você chamaria de 'divisor de arquivo'. Seu formato de arquivo é o mesmo usado pelo software 'Hacha', um conhecido separador na Espanha e na América Latina. HOZ é uma implementação C portátil e de código aberto de um divisor compatível com 'Hacha'.

HOZ é menor e mais rápido que 'Hacha'.

btw, eu usei um 'Z' não é um 'S' em 'Zource' porque 'hoz' é 'foice' em espanhol, e como 'hacha' é a palavra em espanhol para 'machado' ...

Após a instalação, você pode usar a GUI do Hoz soltando ghozum terminal. A operação é tão simples que não precisa de explicação, mas é possível obter mais informações no site do desenvolvedor.

Boa sorte!


0

Lenhador

Um utilitário gratuito de divisão e mesclagem de arquivos desenvolvido em Java. É um aplicativo de tamanho pequeno que permite ao usuário dividir qualquer tipo de arquivo em tamanhos menores em KB, MB ou GB.

Está disponível para Linux e Windows.

O WoodCutter oferece três maneiras de mesclar novamente os arquivos originais. O WoodCutter cria um arquivo de mesclagem que pode ser processado pelo aplicativo WoodCutter para juntar todos os arquivos novamente. Caso o receptor de arquivos divididos não tenha o WoodCutter instalado, o arquivo original também poderá ser obtido, pois o WoodCutter também cria um arquivo em lotes e um arquivo de script do Shell para mesclar os arquivos novamente. O arquivo em lotes será usado na plataforma Windows e o script Shell será usado nas plataformas Linux.

http://java-puzzle.blogspot.com/2009/07/woodcutter.html


2
A licença é "freeware". Eu acho que uma ferramenta de Software Livre que está nos repositórios é uma solução melhor.
Broam 11/09/11

0

split --number

Essa é uma boa opção para gerar N arquivos com o mesmo tamanho, exceto o último, que pode ser maior devido à indivisibilidade. Por exemplo:

printf '0123456789' > f.txt
split -d --number 2 f.txt f.txt.part.
tail f.txt.part.*

dá:

==> f.txt.part.00 <==
01234
==> f.txt.part.01 <==
56789

e:

split -d --number 3 f.txt f.txt.part.
tail f.txt.part.*

dá:

==> f.txt.part.00 <==
012
==> f.txt.part.01 <==
345
==> f.txt.part.02 <==
6789

Comparado com o -bcálculo explícito do tamanho, mencionado em: https://askubuntu.com/a/54584/52975 , o último arquivo pode ser quase duas vezes maior que os anteriores, o que às vezes é uma desvantagem dessa opção. No entanto, é mais conveniente muitas vezes, já que você não precisa fazer o cálculo do tamanho.

Um número igual de linhas foi solicitado em: https://stackoverflow.com/questions/2016894/how-to-split-a-large-text-file-into-smaller-files-with-equal-number-of-lines

Testado em split2.28, Ubuntu 18.04.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.