Parfois, un fichier est trop volumineux pour être transmis par email ou stocké sur un médium limité. La commande split permet de diviser un fichier en plusieurs parties plus petites, et cat permet de les reassembler. Ces deux commandes forment un duo indispensable pour manipuler de gros fichiers.
La syntaxe de base de split est simple :
split [OPTIONS] [FICHIER_ENTREE] [PREFIXE]Par défaut, split crée des fichiers de 1000 lignes chacun. Le préfixe par défaut est x, donc les fichiers générés s'appellent xaa, xab, xac, etc.
| Option | Description |
|---|---|
-l N | Diviser par nombre de lignes (par défaut : 1000) |
-b TAILLE | Diviser par taille en octets (ex: 10M, 1G) |
-d | Utiliser des suffixes numériques au lieu de lettres |
-a N | Longueur du suffixe (par défaut : 2) |
-n N | Nombre de fichiers de sortie |
--verbose | Afficher les actions effectuées |
Pour diviser un fichier de log en morceaux de 500 lignes :
split -l 500 mon_fichier.log partie_Cela crée des fichiers partie_aa, partie_ab, etc.
Pour créer des fichiers de 10 Mo chacun :
split -b 10M fichier_iso.iso piece_Ou des fichiers de 1,5 Mo (utile pour les disquettes/CDs) :
split -b 1500k grande_image.img bloc_Pour avoir des suffixes plus lisibles :
split -d -l 1000 donnees.csv data_Résultat : data_00, data_01, data_02, etc.
Pour diviser en exactement 4 parties :
split -n 4 fichier.zip part_Pour reconstruire le fichier original, utilisez cat avec une redirection :
cat partie_* > fichier_complet.logOu avec des suffixes numériques :
cat data_* > fichier_original.csvAttention : l'ordre de concatenation depend de l'ordre alphabétique. Si vos suffixes sont data_00, data_01, etc., le tri alphabétique fonctionne parfaitement.
Diviser une archive pour l'envoyer en pieces :
# Compresser puis diviser
tar czf - gros_repertoire/ | split -b 25M - archive.tar.gz.part_
# Sur le destinataire, reassembler
cat archive.tar.gz.part_* | tar xzf -# Diviser une image disque
dd if=/dev/sdb | split -b 700M - imageusb_
# Sur une autre machine, remonter l'image
cat imageusb_* | dd of=/dev/sdc# Diviser les logs mensuels
split -l 10000 /var/log/syslog log_mensuel_
# Traiter chaque partie separement
for part in log_mensuel_*; do
echo "Traitement de $part"
# Votre script de traitement ici
donePour vous assurer que le fichier reassemblé est identique à l'original :
# Calculer le hash avant division
md5sum fichier_original.zip
# Après reassemblage
cat parties_* > fichier_reconstruit.zip
md5sum fichier_reconstruit.zipLes deux hashes doivent être identiques.
# Installer pv si nécessaire (Pipe Viewer)
sudo apt install pv
# Reassembler avec barre de progression
cat parties_* | pv -s $(cat parties_* | wc -c) > fichier_reconstruitSi vous recevez des données via un tube :
# Diviser la sortie d'une commande
make clean | split -b 1M - sortie_| Commande | Usage |
|---|---|
split -l 500 fichier.txt part_ | Diviser en fichiers de 500 lignes |
split -b 10M fichier.iso piece_ | Diviser en fichiers de 10 Mo |
split -d -l 1000 fichier.txt part_ | Diviser avec suffixes numériques |
split -n 4 fichier.zip | Diviser en exactement 4 parties |
cat parties_* > original | Réassembler toutes les parties |
cat fichier.iso.part_* | tar xzf - | Réassembler et extraire directement |
seq 1 5000 > test.txt)split -l 1000 test.txt bloc_ls -lh bloc_*cat bloc_* > test_reconstruit.txtdiff test.txt test_reconstruit.txt (ne doit rien afficher)rm bloc_* test.txt test_reconstruit.txt