← Sommaire SkyLinux

Leçon 71 : split et cat — Diviser et assembler des fichiers

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.

1. split — Diviser un fichier

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.

2. Options principales de split

OptionDescription
-l NDiviser par nombre de lignes (par défaut : 1000)
-b TAILLEDiviser par taille en octets (ex: 10M, 1G)
-dUtiliser des suffixes numériques au lieu de lettres
-a NLongueur du suffixe (par défaut : 2)
-n NNombre de fichiers de sortie
--verboseAfficher les actions effectuées

3. Exemples pratiques

Diviser par lignes

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.

Diviser par taille

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_

Diviser avec suffixes numériques

Pour avoir des suffixes plus lisibles :

split -d -l 1000 donnees.csv data_

Résultat : data_00, data_01, data_02, etc.

Spécifier le nombre de fichiers

Pour diviser en exactement 4 parties :

split -n 4 fichier.zip part_

4. cat — Réassembler les fichiers

Pour reconstruire le fichier original, utilisez cat avec une redirection :

cat partie_* > fichier_complet.log

Ou avec des suffixes numériques :

cat data_* > fichier_original.csv

Attention : 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.

5. Cas d'usage courants

Transfert de fichiers volumineux par email

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 -

Transfert sur CD ou clé USB limitée

# 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

Sauvegarde incrémentale par blocs

# 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 done

6. Vérifier l'intégrité après reassemblage

Pour 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.zip

Les deux hashes doivent être identiques.

7. Astuces utiles

Voir la progression avec pv

# 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_reconstruit

Diviser depuis stdin

Si vous recevez des données via un tube :

# Diviser la sortie d'une commande make clean | split -b 1M - sortie_

8. Résumé des commandes

CommandeUsage
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.zipDiviser en exactement 4 parties
cat parties_* > originalRéassembler toutes les parties
cat fichier.iso.part_* | tar xzf -Réassembler et extraire directement

Exercice pratique

  1. Créez un fichier texte contenant plusieurs lignes (utilisez seq 1 5000 > test.txt)
  2. Divisez-le en fichiers de 1000 lignes : split -l 1000 test.txt bloc_
  3. Listez les fichiers créés : ls -lh bloc_*
  4. Réassemblez-les : cat bloc_* > test_reconstruit.txt
  5. Vérifiez l'intégrité : diff test.txt test_reconstruit.txt (ne doit rien afficher)
  6. Supprimez les fichiers temporaires : rm bloc_* test.txt test_reconstruit.txt