split

(divide un file a pezzi)

split(1) ha come argomento opzionale il nome di un file o altrimenti legge da stdin. split(1) divide l'input in tanti altri file che per default hanno nomi che iniziano tutti per x seguito da un suffisso lessicograficamente ordinato nell'intervallo aa-zz. Il file originale rimane inalterato:

$ split file
$ ls
file    xaa     xab     ...
(divide file in files di 1000 linee)
$ split -500 file
(divide file in files di 500 linee)

Un eventuale secondo parametro dopo il nome del file viene usato come un prefisso per i nomi dei file nei quali il file viene diviso:

$ split file piece_
$ ls
file            piece_aa        piece_ab

split(1) è utile quando si deve mandare via email un allegato che supera il limite consentito per la dimensione dei messaggi del destinatario: si divide il file già encodato in pezzi più piccoli che non superano il limite e così non si corre mai il rischio che la mail venga accorciata. Ad es. se il destinatario ha un limite di 64 kb per messaggio, e uuencode genera linee lunghe 62 bytes (compreso il finelinea) si ha che:

50000 b / 62 b/linea >= 800 linee

quindi si ha un buon margine di sicurezza dividendo il messaggio encodato ogni 800 linee, perché dovrebbe sempre risultare:

50000 b + dim. header in byte <= 64 kb
$ uuencode bigfile bigfile >bigfile.uue
$ ls
bigfile         bigfile.uue
$ split -800 bigfile.uue
$ ls
bigfile         xab
bigfile.uue     xac
xaa
$ mail -s "bigfile.uue 1/3" mybuddy < xaa
$ mail -s "bigfile.uue 2/3" mybuddy < xab
$ mail -s "bigfile.uue 3/3" mybuddy < xac
$ rm bigfile.uue x??

Il destinatario può rimettere insieme il file salvando i tre messaggi di email, concatenandoli in ordine, eliminando tutte le eventuali altre linee tranne quelle uuencodate, e infine lanciando uudecode(1):

& w 1-3 bigfile.uue
"bigfile.uue" [New file]
& q
(concatena e salva in mail(1))
$ uudecode bigfile.uue
(si ottiene bigfile)

Estensione GNU/FreeBSD: invece di fare dei tentativi per cercare di determinare ogni quante linee dividere per non superare una certa dimensione in kb o mb, si può usare il parametro b seguito da un numero di byte e un moltiplicatore (k per kb e m per mb). Questo è utile quando si vuole dividere un file binario la cui lunghezza di linea non è uniforme, al contrario dei file prodotti da uuencode(1).

<- indietro indice avanti ->