Comando split in Linux: dividere file e ricostruirli senza perdere dati
split divide un file in più parti in base al numero di righe o alla dimensione in byte. Il file di input rimane disponibile e, per ricostruirne il contenuto, bisogna concatenare tutte le parti nell’ordine originale e verificare il risultato.
In GNU split, senza altre opzioni, ogni parte contiene fino a 1000 righe e il prefisso predefinito è x: i primi nomi sono xaa, xab e così via. Per evitare collisioni, lavorate in una directory nuova e scegliete un prefisso distinto per ciascuna operazione.
Sintassi e scelta del criterio di divisione
split [opzioni] [file-input [prefisso-output]]
Se omettete il file o usate - al suo posto, split legge dallo standard input. -l imposta un limite di righe per parte, mentre -b imposta un limite in byte, adatto anche a contenuti binari. L’ultima parte può essere più piccola delle altre.
Le opzioni variano fra implementazioni. Consultate man split e, in GNU, split --version prima di usare estensioni o unità di misura specifiche.
Esempio completo: preparare e dividere i file
Divisione in gruppi di 500 righe
Eseguite il primo blocco in Bash con gli strumenti GNU. Crea la directory split-demo e vi entra; se esiste già, si interrompe senza riutilizzarla. Prepara un file con i numeri da 1 a 1200 e un piccolo file binario di dieci byte. Se un passaggio fallisce, risolvete il problema prima di proseguire con gli esempi successivi.
mkdir split-demo && cd split-demo && (
set -e
set -o noclobber
seq 1200 > data.txt
printf '\000\001\002\003\004\005\006\007\010\011' > archive.bin
split -l 500 data.txt part-
)
Il comando crea part-aa e part-ab con 500 righe ciascuno, poi part-ac con le 200 rimanenti. data.txt conserva tutte le 1200 righe. La shell rimane in split-demo; l’assenza di output sul terminale è normale se l’operazione riesce.
Divisione per dimensione in byte
Il file binario preparato contiene i byte da 0 a 9. Il limite di quattro byte rende immediatamente verificabile una suddivisione in tre parti:
split -b 4 archive.bin archive-part-
Si ottengono archive-part-aa, archive-part-ab e archive-part-ac, rispettivamente di 4, 4 e 2 byte. Su un file grande, la forma split -b 100M archive.bin archive-part- usa parti di 100 MiB, cioè 104857600 byte ciascuna salvo l’ultima. In GNU, M indica un multiplo di 1024; MB indica un multiplo di 1000. Non eseguite entrambe le forme sullo stesso prefisso della prova: riutilizzerebbero i nomi delle parti.
Ricostruire il file e confrontarlo
Per questa prova, l’elenco delle tre parti è noto. Il seguente blocco le concatena esplicitamente e impedisce di sovrascrivere un file di destinazione già presente:
(
set -e
set -o noclobber
cat archive-part-aa archive-part-ab archive-part-ac > archive-restored.bin
cmp archive.bin archive-restored.bin
)
cmp termina senza output quando il contenuto ricostruito è identico all’originale. Uno stato diverso da zero richiede un controllo: non considerate riuscito il ripristino solo perché il file è stato creato. Potete confrontare anche sha256sum archive.bin archive-restored.bin; i due valori hash devono coincidere.
Controllare due parti create dallo standard input
Dalla directory della prova, il blocco seguente crea una sottodirectory nuova e vi esegue l’esempio su quattro righe. In questo modo il prefisso part- non collide con le parti da 500 righe già create:
mkdir line-demo && (
set -e
cd line-demo
printf 'a\nb\nc\nd\n' | split -l 2 - part-
cat part-aa
cat part-ab
)
I due comandi cat mostrano il contenuto di part-aa e part-ab in sequenza:
a
b
c
d
Le prime due righe appartengono al primo file, le ultime due al secondo. È cat a stampare il testo; split scrive i file e normalmente non ne elenca i nomi. La subshell torna poi alla directory split-demo, senza cambiare la posizione della shell chiamante.
Opzioni principali e nomi delle parti
| Opzione | Funzione in GNU split |
|---|---|
-l N |
Scrive fino a N righe per parte, usando normalmente il carattere di nuova riga come separatore. |
-b dimensione |
Scrive fino al numero di byte indicato in ciascuna parte, senza rispettare necessariamente i confini delle righe. |
-d |
Usa suffissi numerici a partire da zero anziché alfabetici. |
-a N |
Imposta la lunghezza del suffisso. Sceglietela sufficiente per il numero di parti previsto. |
--additional-suffix=valore |
Aggiunge una stringa dopo il suffisso generato; per esempio .bin. Non converte il formato del contenuto. |
Per un prefisso non ancora usato nella prova, split -b 4 -d -a 3 --additional-suffix=.bin archive.bin numeric- produce numeric-000.bin, numeric-001.bin e numeric-002.bin. I numeri con zeri iniziali rendono leggibile l’ordine, ma non sostituiscono il controllo che ogni parte sia presente una sola volta.
Evitare collisioni, parti mancanti e ricostruzioni errate
La forma compatta cat archive-part-* > archive-restored.bin è utilizzabile solo dopo aver controllato i nomi e l’ordine di espansione del glob nella shell. File estranei con lo stesso prefisso, parti vecchie rimaste da una suddivisione precedente o una parte mancante possono produrre un risultato errato senza un evidente errore di cat. L’output di destinazione deve inoltre restare fuori dall’insieme selezionato dal glob.
Per trasferimenti reali, conservate l’elenco ordinato delle parti e un valore hash dell’originale. Dopo il trasferimento, controllate che le parti siano complete, ricostruite in quel preciso ordine e confrontate il contenuto o l’hash. La sola dimensione totale non prova l’identità: parti della stessa lunghezza scambiate di posto possono mantenere la dimensione ma cambiare tutti i dati.
Con GNU split, un nome di output già esistente può essere sovrascritto. set -o noclobber protegge le redirezioni della shell, come il file ricostruito dell’esempio, ma non impedisce a split di aprire i propri file di output. Usate quindi directory nuove anche per ripetere una prova. Conservate spazio libero sufficiente: originale, parti e copia ricostruita possono coesistere sul disco.
split -b può tagliare una riga o un carattere multibyte: una singola parte non è necessariamente testo completo o un archivio apribile autonomamente. -l conserva i confini delle righe, senza imporre un limite in byte. GNU -C cerca di distribuire righe entro un limite di byte, ma una riga che supera da sola il limite viene comunque spezzata. Non presumete quindi che garantisca sempre righe intere.
Se la divisione si interrompe, possono restare parti incomplete: non unitele come se l’operazione fosse terminata. Controllate lo stato dei comandi e il confronto finale. Per tornare alla directory iniziale usate cd ..; verificate percorso e contenuto prima di eliminare i materiali di prova.
Domanda frequente
Split elimina il file originale?
No: normalmente legge l’input e crea i file delle parti. Negli esempi, gli input rimangono disponibili e il ripristino viene confrontato con l’originale. Scegliete comunque directory e prefissi che non possano coincidere con file da conservare.
Documentazione di riferimento
La pagina di manuale del progetto GNU Coreutils per split descrive righe, byte, unità di misura e suffissi. Il manuale completo è consultabile con info '(coreutils) split invocation' se installato; confrontate le opzioni con la versione effettivamente disponibile.




