Come dividere file più grandi in parti più piccole?


189

Ho un file di grandi dimensioni (8 GB per esempio). Come posso dividerlo in più parti, diciamo 3 parti uguali, e dopo come posso integrarle in seguito?


Questo sembra essere un duplicato di askubuntu.com/questions/12172/…
Jo-Erlend Schinstad,

Sei sicuro "Questo sembra essere" ?. Diamine, è la stessa cosa esatta. Tranne qui è ora con un bonus di "Altri esempi e alternative".
Luis Alvarado,

Potrebbe essere utile se dici di più sul motivo per cui vuoi dividerlo e se lo vuoi dividere solo in sottostringhe di byte o se sei aperto a farli impacchettare in qualsiasi tipo di controllo o etichettatura degli errori. Se questo è per metterlo su supporti più piccoli o per i trasferimenti di rete, guarderei qualcosa come par2 .
Poolie,


un liner per equamente diviso per N: (1.) diviso per linee diviso --lines $ (($ (wc -l <$ {your_filename}) / $ {N})) $ {your_filename} (2.) diviso per byte divisi --byte $ (($ (wc -c <$ {nome_file}) / $ {N})) $ {nome_file}
Trevor Boyd Smith

Risposte:


272

Esistono diversi modi per ottenere questo risultato. Cominciamo con quelli di base.

Utilizzando i comandi split e cat :

Diciamo che ho un'immagine ed è troppo grande (10 MB). Tutto quello che faccio è:

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

e poi per metterlo insieme uso cat:

cat prefixFiles* > newimage.jpg

Per esempio:

Supponendo che sia nella cartella in cui si trova l'immagine:

split --bytes=1M myimage.jpg new

se l'immagine si trova in una directory chiamata images puoi anche fare questo:

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

Se l'immagine si trova nella directory / home / cyrex / images puoi farlo:

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

(In tutti i casi sopra di esso sarà diviso myimage.jpgin pezzi 1MB e prefisso al nome dei pezzi con la parola nuova. Così sarebbe simile newaa, newab, newac, newad...)

Se stai dividendo un file di testo e vuoi dividerlo per linee puoi farlo:

split -l 1000 book.txt new

Che dividerà il file di testo in file di output di 1000 righe ciascuno. Questo è un altro modo per dividere un file ed è usato principalmente per file di testo come log, dump sql, file csv, ecc.

Quindi li unisco

cat new* > newimage.jpg

Questo è un modo. Puoi anche cambiare la dimensione dei pezzi divisi. Basta cambiare la parte che dice --bytes=1Ma --bytes=1Kper 1 kilobyte o 1G per giga, o un altro numero come --bytes=4Kper pezzi 4KB.

Utilizzando Nautilus

Un altro modo è l'opzione di compressione nella GUI di Nautilus. Ti dà la possibilità di dividere il file oi file che vuoi comprimere in dimensioni di megabyte più piccole. È semplice e facile.

Ancora un altro modo è usare 7z

Supponendo che tu abbia un'immagine ISO chiamata ubuntu.isopotresti farlo:

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

Ciò creerà file di dimensioni di 5 MB dal ubuntu.iso. La -v5mè la dimensione del volume in modo da poter cambiare a 10, 12, 1, 3 e anche il m può essere cambiato a k per kilobyte, ecc; lo -mx0switch dice a 7-Zip di non usare alcuna compressione, cioè solo di dividere i dati in parti.

Per estrarre basta

7z x ubuntu.7z.001

in questo modo si estrae il primo file e 7z inizia a estrarre dai seguenti file in ordine. Puoi anche fare

7z e ubuntu.7z.001

che ha lo stesso effetto qui.


2
Non includevo rar poiché non è ancora open source (per quanto ne so) e non ho aggiunto Tar poiché stavo cercando un modo semplice per fare la divisione.
Luis Alvarado,

Aggiungi anche gzip - 7zip richiede l'installazione di un pacchetto iirc
Broam

Per quello che so, Gzip (come tar) non ha un'opzione facile per dividere il file compresso. In tutti i casi li ho visti usando il comando split per "dividere" il file compress. Quindi non sarebbe un comando ma un gruppo di comandi per raggiungere un unico scopo che può essere fatto con un singolo come split o 7z. Per l'installazione di 7Zip (che è il p7zip del pacchetto p7zip-full) non mi ha mai chiesto iirc;).
Luis Alvarado,

Aggiunta divisione dei file di testo. Dimenticato questo e oggi è successo che avrei dovuto dividere un paio di file CSV. Questo è per quei dump che devi avere una specifica quantità di linee.
Luis Alvarado,


4

HJSplit

È un popolare programma freeware per dividere e ricombinare i file. Il programma è disponibile su Windows, Linux e una varietà di altre piattaforme.

HJSplit per Linux è uno splitter di file freeware per Linux con un'interfaccia utente grafica completa. HJSplit supporta file di dimensioni superiori a 100 Gigabyte, Split, Join / Recombine, checksum MD5, confronto file, "esegui senza installazione" e il programma è completamente portatile.

Non è necessario installare HJSplit per Linux e non dipende da alcuna libreria speciale. Basta estrarre l'archivio hjsplitlx.tar.gz in una directory di tua scelta e avviare il programma dal file manager di Linux o da una finestra di terminale. Potrebbe essere necessario regolare le autorizzazioni del file del programma su "eseguibile".

inserisci qui la descrizione dell'immagine


1
Devo dire che il file Windows funziona anche su Linux.
Uri Herrera,

2
Esistono diversi modi per dividere / unire un file prima di passare a un programma come questo. Preferisco usare le potenti opzioni offerte da Linux e per dividere / unire i file ha dei modi abbastanza veloci e sicuri per farlo.
Luis Alvarado,

3
È sicuro, veloce, E è multipiattaforma che include LINUX, non è un'applicazione solo per WINDOWS che funziona anche in Linux ...
Uri Herrera,

2
Uso HJSplit, è fantastico e semplice. Non è necessario digitare comandi e nomi dei parametri quando è possibile inserire i valori dei parametri in caselle di testo.
Matteo Leggi il

2
Ed essere un download gratuito rende peggio perché? e devo dire che ORA QUI IN OP CHIEDE UN SOFTWARE GRATUITO (che è questo, è gratuito) e ciò a cui ti riferisci si chiama OPEN, c'è una differenza che conosci?
Uri Herrera,


3

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

inserisci qui la descrizione dell'immagine

Dallo sviluppatore:

OZ è quello che chiameresti un "file splitter". Il suo formato di file è lo stesso di quello utilizzato dal software "Hacha", un noto splitter in Spagna e in America Latina. HOZ è un'implementazione C open source e portatile di uno splitter compatibile 'Hacha'.

HOZ è più piccolo e più veloce di "Hacha".

tra l'altro, ho usato una "Z" non è una "S" in "Zource" perché "hoz" è "falce" in spagnolo, e poiché "hacha" è la parola spagnola per "ascia" ...

Dopo l'installazione, è possibile utilizzare la GUI di Hoz rilasciando ghozun terminale. L'operazione è così semplice che non ha bisogno di spiegazioni ma ulteriori informazioni sono disponibili nel sito dello sviluppatore.

In bocca al lupo!


0

Taglialegna

Un'utilità gratuita di divisione e unione di file sviluppata in Java. Si tratta di un'applicazione di piccole dimensioni che consente all'utente di dividere qualsiasi tipo di file in dimensioni inferiori in KB, MB o GB.

È disponibile per Linux e Windows.

WoodCutter offre 3 modi per unire nuovamente i file originali. WoodCutter crea un file di unione che può essere elaborato dall'applicazione WoodCutter per unire nuovamente tutti i file. Nel caso in cui nel destinatario dei file divisi non sia installato WoodCutter, è possibile ottenere anche il file originale poiché WoodCutter crea anche un file batch e un file di script Shell per unire nuovamente i file. Il file batch verrà utilizzato nella piattaforma Windows e lo script Shell verrà utilizzato nelle piattaforme Linux.

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


2
La licenza è "freeware". Penso che uno strumento di software libero presente nei repository sia una soluzione migliore.
Broam,

0

split --number

Questa è una buona opzione per generare N file con le stesse dimensioni, tranne l'ultimo che potrebbe essere più grande a causa dell'indivisibilità. Per esempio:

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

Rispetto al -b+ calcolo esplicito delle dimensioni, menzionato in: https://askubuntu.com/a/54584/52975 , l'ultimo file potrebbe essere quasi 2 volte più grande dei precedenti, il che a volte è un aspetto negativo di questa opzione. Tuttavia, è più conveniente molte volte, poiché non è necessario eseguire il calcolo delle dimensioni da soli.

È stato chiesto lo stesso numero di righe su: https://stackoverflow.com/questions/2016894/how-to-split-a-large-text-file-into-smaller-files-with-equal-number-of-lines

Testato in split2.28, Ubuntu 18.04.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.