Als je nog nooit van de opdracht split hoorde, mis je een hoop. De split opdracht splits (zoals de naam doet vermoeden) bestanden in kleinere bestanden. Split werkt zowel met tekst- als binaire bestanden. Dit is handig om grote bestanden die je niet op een opslagapparaat (met FAT geformatteerde USB stick) kunt opslaan, eerst te splitsen in kleinere bestanden die je wel kunt opslaan. Dit is ook handig om grote bestanden via bijvoorbeeld e-mail waarbij de bijlage's maar een beperkte grootte mogen hebben, te verzenden. Een andere toepassing is het splitsen van logbestanden om deze vlotter te kunnen verwerken.
Standaard krijgen de gesplitste deelbestanden een naam die begint met x en gevolgd wordt door 2 letters. Het eerste bestand krijgt de naam xaa, gevolgd door xab, xac en de laatste xzz. In dit geval kan een bestand gesplitst worden in maximaal 676 (26 x 26) deelbestanden. In het voorbeeld werken we met een 10 MB groot bestand:
dany@linux-att3:~>mkdir testdany@linux-att3:~>cd testdany@linux-att3:~/test>dd if=/dev/zero of=bestand bs=10M count=11+0 records gelezen 1+0 records geschreven 10485760 bytes (10 MB) gekopieerd, 0,00717586 s, 1,5 GB/s dany@linux-att3:~/test>ls -lh bestand-rw-r--r-- 1 dany users 10M 11 apr 14:50 bestand
Nu kunnen we dit bestand splitsen in deelbestanden met een grootte van 1 MB:
dany@linux-att3:~/test>split -b 1M bestanddany@linux-att3:~/test>ls -lhtotaal 20M -rw-r--r-- 1 dany users 10M 11 apr 14:50 bestand -rw-r--r-- 1 dany users 1,0M 11 apr 15:02 xaa -rw-r--r-- 1 dany users 1,0M 11 apr 15:02 xab -rw-r--r-- 1 dany users 1,0M 11 apr 15:02 xac -rw-r--r-- 1 dany users 1,0M 11 apr 15:02 xad -rw-r--r-- 1 dany users 1,0M 11 apr 15:02 xae -rw-r--r-- 1 dany users 1,0M 11 apr 15:02 xaf -rw-r--r-- 1 dany users 1,0M 11 apr 15:02 xag -rw-r--r-- 1 dany users 1,0M 11 apr 15:02 xah -rw-r--r-- 1 dany users 1,0M 11 apr 15:02 xai -rw-r--r-- 1 dany users 1,0M 11 apr 15:02 xaj
In sommige situaties wil je een vast aantal deelbestanden verkrijgen. Het volgende voorbeeld maakt maximaal 3 deelbestanden aan:
dany@linux-att3:~/test>rm xa?dany@linux-att3:~/test>split -n 3 bestanddany@linux-att3:~/test>ls -lhtotaal 21M -rw-r--r-- 1 dany users 10M 11 apr 14:50 bestand -rw-r--r-- 1 dany users 3,4M 11 apr 15:08 xaa -rw-r--r-- 1 dany users 3,4M 11 apr 15:08 xab -rw-r--r-- 1 dany users 3,4M 11 apr 15:08 xac
Het volgende voorbeeld maakt voor elke letter in het woord pindanet.be een bestand aan. De truc bestaat uit het splitsen van een bestand op basis van 1 byte wat overeenkomt met 1 letter. We gebruiken daarbij getallen als achtervoegsel:
dany@linux-att3:~/test>rm *dany@linux-att3:~/test>echo pindanet.be | split -b 1 -ddany@linux-att3:~/test>lsx00 x01 x02 x03 x04 x05 x06 x07 x08 x09 x10 x11 dany@linux-att3:~/test>cat *pindanet.be
Een bestand splitsen is eenvoudig, maar hoe herstel je het originele bestand uit de deelbestanden. Laten we een ISO bestand in twee splitsen:
dany@linux-att3:~/test>rm x??dany@linux-att3:~/test>split -n 2 openSUSE-13.1-DVD-x86_64.isodany@linux-att3:~/test>ls -lhtotaal 8,6G -rw-r--r-- 1 dany users 4,3G 21 nov 12:11 openSUSE-13.1-DVD-x86_64.iso -rw-r--r-- 1 dany users 2,2G 11 apr 15:24 xaa -rw-r--r-- 1 dany users 2,2G 11 apr 15:24 xab
Nu kunnen we de deelbestanden samenvoegen om het originele bestand te herstellen:
dany@linux-att3:~/test> cat x* > hersteld-openSUSE-13.1-DVD-x86_64.iso
Om te weten of het herstelde ISO bestand een exacte replica is van het oorspronkelijke bestand berekenen we voor beiden de md5sum, deze moet voor beide bestanden dezelfde zijn:
dany@linux-att3:~/test> md5sum *.iso
1096c9c67fc8a67a94a32d04a15e909d hersteld-openSUSE-13.1-DVD-x86_64.iso
1096c9c67fc8a67a94a32d04a15e909d openSUSE-13.1-DVD-x86_64.iso
Zoals je merkt zijn beide bestanden precies hetzelfde.
Nu we de basis kennen, kunnen we een uitgebreider voorbeeld bekijken: het splitsen van een archief tijdens het aanmaken van het archief. In het voorbeeld maken we een gecomprimeerd archief van de map /tmp/dumps. Het archief wordt tijdens het aanmaken gesplitst in deelbestanden:
dany@linux-att3:~/test>rm *dany@linux-att3:~/test>du -sh /tmp/dumps/1,9M /tmp/dumps/ dany@linux-att3:~/test>tar cz /tmp/dumps/ | split -b 100Ktar: Leidende '/' wordt uit lidnamen weggelaten dany@linux-att3:~/test>ls -lhtotaal 272K -rw-r--r-- 1 dany users 100K 11 apr 15:45 xaa -rw-r--r-- 1 dany users 100K 11 apr 15:45 xab -rw-r--r-- 1 dany users 72K 11 apr 15:45 xac
Zoals je merkt, bestaat het archief uit drie deelbestanden met een maximale grootte van 100 KB. De originele map herstellen, gaat als volgt:
dany@linux-att3:~/test>cat * | tar xzdany@linux-att3:~/test>lstmp xaa xab xac dany@linux-att3:~/test>du -sh tmp/dumps/1,9M tmp/dumps/
De mogelijkheden van de split opdracht worden enkel beperkt door uw kennis en verbeelding.
De noodzakelijke kennis kan je bijschaven met behulp van de manual (man split), de verbeelding wordt bepaald door uw ervaringen en aanleg.
