Un pense-bête

Trucs de geek : Découper / Regrouper des fichiers

Malgré l'utilisation de clé USB et de messagerie permettant l'envoi de fichiers joints de grandes tailles, il peut être utile de découper un fichier en plusieurs morceaux.

Pour ce faire le plus simple est d'ouvrir un terminal afin de réaliser ces opérations en ligne de commande :

Split permet de type de découpage :

  • un découpage en ligne qui va convenir aux fichiers texte
  • un découpage en octets qui conviendra aux ficheirs binaires

Afin d'illustrer le 1er cas nous allons travailler un fichier dénommer Anglais.txt. Pour savoir combien il contient de lignes nous utilisons la commande WC avec l'option L :

# wc -l Anglais.txt

qui donne :

9168 Anglais.txt

Le plus simple est de faire un simple :

# split Anglais.txt

Ce qui nous donne si on fait un un ls :

9168 Anglais.txt

1000 xaa
1000 xab
1000 xac
1000 xad
1000 xae
1000 xaf 
1000 xag
1000 xah
1000 xai
168 xaj
18336 total

Split a donc découpé le fichier par tranche de 1000 lignes et créer des fichier dont les noms sont sur trois caractères et s'incrémentent alphabétiquement.

Pour avoir des noms plus longs il faut passer l'option -a5 (pour des noms sur 5 caractères).

Pour avoir des nombres il faut passer l'option -d.

Pour choisir soi même le nombre de fichiers générés en sortie il  faut passer l'option -n suivi du nombre voulu (ex: -n5 pour 5 fichiers).

Si vous souhaitez découper le fichier en fichiers de taille en octets précise vous devez passer l'option -b suivi de la taille désirée :
qui donne :

# split -b 50000 Anglais.txt

qui donne :

 jfd@jfd-GA-MA770T-UD3P:~/split$ ls -la
total 280
drwxrwxr-x  2 jfd jfd   4096 déc.  16 20:11 .
drwxr-xr-x 97 jfd jfd  12288 déc.  16 19:32 ..
-rw-rw-r--  1 jfd jfd 130520 déc.  16 19:31 Anglais.txt
-rw-rw-r--  1 jfd jfd  50000 déc.  16 20:11 xaa
-rw-rw-r--  1 jfd jfd  50000 déc.  16 20:11 xab
-rw-rw-r--  1 jfd jfd  30520 déc.  16 20:11 xac

Pour reconstituer le fichier à partir des morceaux il faut utiliser la commande : cat

$ cat xaa xab xac > Anaglais.txt

Pour  vérifier que le fichier reconstitué est identique au fichier original, nous utilisons la commande diff :

$ diff Anaglais.txt /home/jfd/Anglais.txt -s
Les fichiers Anaglais.txt et /home/jfd/Anglais.txt sont identiques

L'option "-s" force diff à nous dire si les fichiers sont bien identiques.

Vous pouvez changer la taille des morceaux qui seront créés. Si vous voulez des morceaux de 30 Mo indiquez simplement "-b 30M".

Voyons un exemple complet de sauvegarde puis de découpage de l'archive créée.

La sauvegarde :

$ tar xzvf ma_musique.tar.gz Musique/

On vérifie la taille du fichier produit :

$ ls ma_musique.tar.gz -l

-rw-r--r-- 1 jfdigonnet vboxusers 1260594757 juil. 22 14:53 ma_musique.tar.gz

Et on découpe :

$ split -b 150M ma_musique.tar.gz "ma_musique.part"

On vérifie les fichiers créés :

$ ls -l ma_musique*

-rw-r--r-- 1 jfdigonnet vboxusers  157286400 juil. 22 14:55 ma_musique.partaa
-rw-r--r-- 1 jfdigonnet vboxusers  157286400 juil. 22 14:55 ma_musique.partab
-rw-r--r-- 1 jfdigonnet vboxusers  157286400 juil. 22 14:55 ma_musique.partac
-rw-r--r-- 1 jfdigonnet vboxusers  157286400 juil. 22 14:55 ma_musique.partad
-rw-r--r-- 1 jfdigonnet vboxusers  157286400 juil. 22 14:55 ma_musique.partae
-rw-r--r-- 1 jfdigonnet vboxusers  157286400 juil. 22 14:55 ma_musique.partaf
-rw-r--r-- 1 jfdigonnet vboxusers  157286400 juil. 22 14:55 ma_musique.partag
-rw-r--r-- 1 jfdigonnet vboxusers  157286400 juil. 22 14:55 ma_musique.partah
-rw-r--r-- 1 jfdigonnet vboxusers    2303557 juil. 22 14:55 ma_musique.partai
-rw-r--r-- 1 jfdigonnet vboxusers 1260594757 juil. 22 14:53 ma_musique.tar.gz

On obtiens bien 9 fichiers.

Pour vérifier on supprime le fichier d'origine :

$ rm ma_musique.tar.gz

et on le reconstitue :

$ cat ma_musique.parta* > ma_musique.tar.gz

On vérifie :

$ ls -l ma_musique.tar.gz
-rw-r--r-- 1 jfdigonnet vboxusers 1260594757 juil. 22 14:58 ma_musique.tar.gz

C'est nickel.

Fait le 16/01/2015

 

 

Tags: geek, console, split