Pour vous aider à en savoir plus sur la commande split, j'utilise un fichier texte relativement volumineux contenant 17170 lignes et une taille de 1,4 Mo. Vous pouvez télécharger une copie de ce fichier à partir du lien GitHub.
Notez que je n'afficherai pas directement la sortie dans ces exemples en raison de la grande taille des fichiers. J'utiliserai les commandes ll et wc pour mettre en surbrillance les modifications de fichiers.
Je vous conseille de jeter un coup d'œil rapide à la commande wc pour comprendre la sortie des exemples de commande split.
Exemples de commande Split sous Linux
Voici la syntaxe de la commande Split :
split [options] filename [prefix]
Voyons comment l'utiliser pour diviser des fichiers sous Linux.
1. Diviser les fichiers en plusieurs fichiers
Par défaut, la commande split crée de nouveaux fichiers pour chaque 1000 lignes. Si aucun préfixe n'est spécifié, il utilisera 'x'. Les lettres qui suivent énumèrent les fichiers donc xaa vient en premier, puis xab, et ainsi de suite.
Séparons l'exemple de fichier journal :
split someLogFile.log
Si vous utilisez la commande ls, vous pouvez voir plusieurs nouveaux fichiers dans votre répertoire.
[email protected]:~/Documents$ ls
someLogFile.log xab xad xaf xah xaj xal xan xap xar
xaa xac xae xag xai xak xam xao xaq
Vous pouvez utiliser wc pour vérifier rapidement le nombre de lignes après le fractionnement.
[email protected]:~/Documents$ wc -l xaa xaq xar
1000 xaa
1000 xaq
170 xar
Rappelez-vous de tout à l'heure que nous avons vu que notre fichier initial comportait 17 170 lignes. Nous pouvons donc voir que notre programme a fait comme prévu en créant 18 nouveaux fichiers. 17 d'entre eux sont remplis de 1000 lignes chacun, et le dernier contient les 170 lignes restantes.
Une autre façon de démontrer ce qui se passe est d'exécuter la commande avec l'option détaillée. Si vous n'êtes pas familier avec le verbeux, vous manquez quelque chose ! Il fournit des informations plus détaillées sur ce que fait votre système et peut être utilisé avec de nombreuses commandes.
split someLogFile.log --verbose
Vous pouvez voir ce qui se passe avec votre commande sur l'écran :
creating file 'xaa'
creating file 'xab'
creating file 'xac'
creating file 'xad'
creating file 'xae'
creating file 'xaf'
creating file 'xag'
creating file 'xah'
creating file 'xai'
creating file 'xaj'
creating file 'xak'
creating file 'xal'
creating file 'xam'
creating file 'xan'
creating file 'xao'
creating file 'xap'
creating file 'xaq'
creating file 'xar'
2. Diviser les fichiers en plusieurs fichiers avec des numéros de ligne spécifiques
Je comprends que vous n'aimiez peut-être pas que les fichiers soient divisés en fichiers de 1000 lignes. Vous pouvez modifier ce comportement avec -l
option.
Lorsque cela est ajouté, vous pouvez maintenant spécifier le nombre de lignes que vous voulez dans chacun des nouveaux fichiers.
split someLogFile.log -l 500
Comme vous pouvez le deviner, les fichiers divisés ont maintenant 500 lignes chacun, sauf la dernière.
[email protected]:~/Documents$ wc -l xbh xbi
500 xbh
170 xbi
Vous avez maintenant beaucoup plus de fichiers, mais avec deux fois moins de lignes dans chacun.
3. Diviser les fichiers en n nombre de fichiers
Le -n
L'option facilite la division en un nombre désigné de morceaux ou de morceaux. Vous pouvez attribuer le nombre de fichiers que vous souhaitez en ajoutant une valeur entière après -n.
split someLogFile.log -n 15
Vous pouvez maintenant voir qu'il y a 15 nouveaux fichiers.
[email protected]:~/Documents$ ls
someLogFile.log xaa xab xac xad xae xaf xag xah xai xaj xak xal xam xan xao
4. Diviser les fichiers avec un préfixe de nom personnalisé
Que se passe-t-il si vous souhaitez utiliser split mais conserver le nom d'origine de mon fichier ou créer un nouveau nom au lieu d'utiliser « x » ?
Vous vous souvenez peut-être avoir vu le préfixe dans le cadre de la syntaxe décrite au début de l'article. Vous pouvez écrire votre propre nom de fichier personnalisé après le fichier source.
split someLogFile.log someSeparatedLogFiles.log_
Voici les fichiers fractionnés dont les noms commencent par le préfixe donné.
[email protected]:~/Documents$ ls
someLogFile.log someSeparatedLogFiles.log_aj
someSeparatedLogFiles.log_aa someSeparatedLogFiles.log_ak
someSeparatedLogFiles.log_ab someSeparatedLogFiles.log_al
someSeparatedLogFiles.log_ac someSeparatedLogFiles.log_am
someSeparatedLogFiles.log_ad someSeparatedLogFiles.log_an
someSeparatedLogFiles.log_ae someSeparatedLogFiles.log_ao
someSeparatedLogFiles.log_af someSeparatedLogFiles.log_ap
someSeparatedLogFiles.log_ag someSeparatedLogFiles.log_aq
someSeparatedLogFiles.log_ah someSeparatedLogFiles.log_ar
someSeparatedLogFiles.log_ai
5. Fractionner et spécifier la longueur du suffixe
Split présente une longueur de suffixe par défaut de 2 [aa, ab, etc.]. Cela changera automatiquement à mesure que le nombre de fichiers augmentera, mais si vous souhaitez le modifier manuellement, cela est également possible. Supposons donc que vous souhaitiez que nos fichiers s'appellent quelque chose comme someSeparatedLogFiles.log_aaaab.
Comment pouvez-vous faire cela? L'option -a
permet de spécifier la longueur du suffixe.
split someLogFile.log someSeparatedLogFiles.log_ -a 5
Et voici les fichiers divisés :
[email protected]:~/Documents$ ls
someLogFile.log someSeparatedLogFiles.log_aaaae someSeparatedLogFiles.log_aaaaj someSeparatedLogFiles.log_aaaao
someSeparatedLogFiles.log_aaaaa someSeparatedLogFiles.log_aaaaf someSeparatedLogFiles.log_aaaak someSeparatedLogFiles.log_aaaap
someSeparatedLogFiles.log_aaaab someSeparatedLogFiles.log_aaaag someSeparatedLogFiles.log_aaaal someSeparatedLogFiles.log_aaaaq
someSeparatedLogFiles.log_aaaac someSeparatedLogFiles.log_aaaah someSeparatedLogFiles.log_aaaam someSeparatedLogFiles.log_aaaar
someSeparatedLogFiles.log_aaaad someSeparatedLogFiles.log_aaaai someSeparatedLogFiles.log_aaaan
6. Fractionner avec un suffixe d'ordre numérique
Jusqu'à présent, vous avez vu vos fichiers séparés en utilisant différentes combinaisons de lettres. Personnellement, je trouve beaucoup plus facile de distinguer les fichiers à l'aide de numéros.
Conservons la longueur du suffixe de l'exemple précédent, mais changeons l'organisation alphabétique en numérique avec l'option -d
.
split someLogFile.log someSeparatedLogFiles.log_ -a 5 -d
Alors maintenant, vous aurez des fichiers fractionnés avec des suffixes numériques.
[email protected]:~/Documents$ ls
someLogFile.log someSeparatedLogFiles.log_00004 someSeparatedLogFiles.log_00009 someSeparatedLogFiles.log_00014
someSeparatedLogFiles.log_00000 someSeparatedLogFiles.log_00005 someSeparatedLogFiles.log_00010 someSeparatedLogFiles.log_00015
someSeparatedLogFiles.log_00001 someSeparatedLogFiles.log_00006 someSeparatedLogFiles.log_00011 someSeparatedLogFiles.log_00016
someSeparatedLogFiles.log_00002 someSeparatedLogFiles.log_00007 someSeparatedLogFiles.log_00012 someSeparatedLogFiles.log_00017
someSeparatedLogFiles.log_00003 someSeparatedLogFiles.log_00008 someSeparatedLogFiles.log_00013
7. Ajouter des suffixes hexadécimaux pour diviser les fichiers
Une autre option pour la création de suffixe consiste à utiliser le suffixe hexadécimal intégré qui alterne les lettres et les chiffres ordonnés.
Pour cet exemple, je vais combiner quelques éléments que je vous ai déjà montrés. Je vais diviser le fichier en utilisant mon propre préfixe. J'ai choisi un trait de soulignement pour des raisons de lisibilité.
J'ai utilisé le -x
possibilité de créer un suffixe hexadécimal. Ensuite, j'ai divisé notre fichier en 50 morceaux et j'ai donné au suffixe une longueur de 6.
split someLogFile.log _ -x -n50 -a6
Et voici le résultat de la commande ci-dessus :
[email protected]:~/Documents$ ls
_000000 _000003 _000006 _000009 _00000c _00000f _000012 _000015 _000018 _00001b _00001e _000021 _000024 _000027 _00002a _00002d _000030
_000001 _000004 _000007 _00000a _00000d _000010 _000013 _000016 _000019 _00001c _00001f _000022 _000025 _000028 _00002b _00002e _000031
_000002 _000005 _000008 _00000b _00000e _000011 _000014 _000017 _00001a _00001d _000020 _000023 _000026 _000029 _00002c _00002f someLogFile.log
8. Diviser les fichiers en plusieurs fichiers de taille spécifique
Il est également possible d'utiliser la taille du fichier pour diviser les fichiers en fractionnement. Peut-être avez-vous besoin d'envoyer un fichier volumineux sur un réseau limité en taille aussi efficacement que possible. Vous pouvez spécifier la taille exacte selon vos besoins.
La syntaxe peut devenir un peu délicate à mesure que nous continuons à ajouter des options. Donc, je vais vous expliquer comment le -b
commande fonctionne avant de montrer l'exemple.
Lorsque vous souhaitez créer des fichiers d'une taille spécifique, utilisez le -b
option. Vous pouvez alors écrire n K[B], n M[B], n G[B] où n est la valeur de la taille de votre fichier et K [1024] est -kibi, M est -mebi, G est -gibi, etc. Ko [1000] correspond à un kilo, Mo à un méga, etc.
Il peut sembler qu'il se passe beaucoup de choses, mais ce n'est pas si complexe quand on le décompose. Vous avez spécifié le fichier source, notre préfixe de nom de fichier de destination, un suffixe numérique et une séparation par taille de fichier de 128 Ko.
split someLogFile.log someSeparatedLogFiles.log_ -d -b 128KB
Voici les fichiers divisés :
[email protected]:~/Documents$ ls
someLogFile.log someSeparatedLogFiles.log_02 someSeparatedLogFiles.log_05 someSeparatedLogFiles.log_08
someSeparatedLogFiles.log_00 someSeparatedLogFiles.log_03 someSeparatedLogFiles.log_06 someSeparatedLogFiles.log_09
someSeparatedLogFiles.log_01 someSeparatedLogFiles.log_04 someSeparatedLogFiles.log_07 someSeparatedLogFiles.log_10
Vous pouvez vérifier le résultat avec la commande "wc".
[email protected]:~/Documents$ wc someSeparatedLogFiles.log_0*
1605 4959 128000 someSeparatedLogFiles.log_00
1605 4969 128000 someSeparatedLogFiles.log_01
1605 4953 128000 someSeparatedLogFiles.log_02
1605 4976 128000 someSeparatedLogFiles.log_03
1605 4955 128000 someSeparatedLogFiles.log_04
1605 4975 128000 someSeparatedLogFiles.log_05
1605 4966 128000 someSeparatedLogFiles.log_06
1605 4964 128000 someSeparatedLogFiles.log_07
1605 4968 128000 someSeparatedLogFiles.log_08
1605 4959 128000 someSeparatedLogFiles.log_09
16050 49644 1280000 total
9. Diviser les fichiers en plusieurs fichiers de taille « Au maximum » n avec
Si vous souhaitez diviser des fichiers à peu près de la même taille, mais conserver la structure de la ligne, cela pourrait être le meilleur choix pour vous. Avec -C
, vous pouvez spécifier une taille maximale. Ensuite, le programme divisera automatiquement les fichiers en fonction des lignes complètes.
split someLogFile.log someNewLogFiles.log_ -d -C 1MB
Vous pouvez voir dans la sortie que le premier fichier divisé a une taille de près de 1 Mo, tandis que le reste du fichier se trouve dans le deuxième fichier.
[email protected]:~/Documents$ ll
total 2772
drwxr-xr-x 2 chris chris 81920 Jul 24 22:01 ./
drwxr-xr-x 19 chris chris 4096 Jul 23 22:23 ../
-rw-r--r-- 1 chris chris 1369273 Jul 20 17:52 someLogFile.log
-rw-r--r-- 1 chris chris 999997 Jul 24 22:01 someNewLogFiles.log_00
-rw-r--r-- 1 chris chris 369276 Jul 24 22:01 someNewLogFiles.log_01
Astuce bonus :Rejoindre des fichiers fractionnés
Il ne s'agit pas d'une commande fractionnée, mais elle peut être utile aux nouveaux utilisateurs.
[email protected]:~/Documents$ ls
xaa xab xac xad xae xaf xag xah xai xaj xak xal xam xan xao xap xaq xar
Vous pouvez utiliser une autre commande pour rejoindre ces fichiers et créer une réplique de notre document complet. La commande cat est l'abréviation de concaténer qui est juste un mot fantaisiste qui signifie "joindre des éléments ensemble". Étant donné que tous les fichiers commencent par la lettre "x", l'astérisque appliquera la commande à tous les fichiers commençant par cette lettre.
[email protected]:~/Documents$ cat x* > recoveredLogFile.log
[email protected]:~/Documents$ ls
recoveredLogFile.log xab xad xaf xah xaj xal xan xap xar
xaa xac xae xag xai xak xam xao xaq
Comme vous pouvez le voir, notre fichier recréé a la même taille que notre original.
wc -l recreatedLogFile.log
17170 recreatedLogFile.log
Notre mise en forme (y compris le nombre de lignes) est conservée dans le fichier créé.
Si vous êtes nouveau sur Linux, j'espère que ce tutoriel vous a aidé à comprendre la commande split. Si vous êtes plus expérimenté, dites-nous votre façon préférée d'utiliser split dans les commentaires ci-dessous !
Débutant ou expérimenté, je vous suggérerais également de regarder la commande csplit qui est un moyen légèrement meilleur de diviser des fichiers en ligne de commande Linux.