Commande split de Linux

Linux 命令大全Référence des commandes Linux

splitsplit est un outil de découpage de fichiers intégré à Linux qui peut découper un fichier par nombre de lignes, taille ou quantité spécifiée.

splitLa commande est utilisée pour découper un gros fichier en plusieurs fichiers plus petits, ce qui facilite le transfert, le stockage ou le traitement en parallèle.

Les fichiers découpés peuvent être réassemblés à l'aide de lacatcommande pour les remettre dans le fichier d'origine.

Lorsque les fichiers journaux sont trop volumineux pour être ouverts avec un éditeur, lorsqu'un fichier volumineux doit être téléversé par morceaux, ou lorsque les données doivent être traitées en parallèle,splitsplit est la solution.

Les fichiers découpés sont nommés par défaut avecxaa、xab、xacet d'autres séquences alphabétiques.

splitsplit ne supprime ni ne modifie le fichier d'origine, l'opération de découpage est donc sûre. Toutefois, lorsque vous découpez en de nombreux petits fichiers, assurez-vous de disposer de suffisamment d'espace disque.

Syntaxe de la commande

splitLa syntaxe de base de split est la suivante :

split [选项] [输入文件] [输出文件前缀]

Si aucun fichier d'entrée n'est spécifié, les données sont lues depuis l'entrée standard.

Si aucun préfixe de fichier de sortie n'est spécifié, le préfixe par défaut estxutilisé.

splitLes options courantes de split sont listées ci-dessous :

OptionDescriptionExemple
-b, --bytes=大小Découper le fichier selon le nombre d'octets spécifiésplit -b 100M large.log
-l, --lines=行数Découper le fichier selon le nombre de lignes spécifiésplit -l 1000 data.txt
-n, --number=数量Découper en le nombre spécifié de petits fichierssplit -n 5 data.txt
-a, --suffix-length=NSpécifier la longueur du suffixe (par défaut : 2)split -a 3 -l 100 data.txt
-d, --numeric-suffixesUtiliser des suffixes numériques au lieu de suffixes alphabétiquessplit -d -l 100 data.txt
-C, --line-bytes=大小Découper par taille tout en gardant chaque ligne complètesplit -C 10M log.txt
--verboseAfficher des informations détaillées sur le processus de découpagesplit --verbose -b 10M file.bin

Les unités de taille prises en charge incluent :K(KB),M(MB)、G(GB)、T(TB) et autres suffixes.

Différence entre -b et -C :

OptionComportementScénario d'application
-bCoupe strictement selon le nombre d'octets et peut tronquer au milieu d'une ligneFichiers binaires ou scénarios où les sauts de ligne n'ont pas d'importance
-CTente de couper aux limites de ligne lorsqu'il atteint la limite de taille, en veillant à ce que chaque ligne soit complèteJournaux texte, CSV et autres scénarios où les lignes doivent rester intactes

Lors de la division de fichiers texte, privilégiez-Cover-bpour éviter qu'une ligne soit coupée et répartie entre deux fichiers.


Utilisation détaillée

Diviser par nombre de lignes

La division par nombre de lignes est la méthode la plus intuitive et convient au traitement de fichiers journaux ou de données CSV.

# 生成一个包含 5000 行的测试文件
$ seq 1 5000 > data.txt

# 每 1000 行拆分为一个小文件
$ split -l 1000 data.txt part_

# 查看生成的文件
$ ls -lh part_*
-rw-r--r-- 1 example example 3.9K May 19 14:30 part_aa
-rw-r--r-- 1 example example 3.9K May 19 14:30 part_ab
-rw-r--r-- 1 example example 3.9K May 19 14:30 part_ac
-rw-r--r-- 1 example example 3.9K May 19 14:30 part_ad
-rw-r--r-- 1 example example 3.9K May 19 14:30 part_ae

Après exécution, 5 fichiers sont générés, chacun avec exactement 1000 lignes, et les noms de fichiers utilisentpart_comme préfixe.

Diviser par taille de fichier

La division par taille convient pour découper des fichiers binaires ou limiter la taille maximale d'un seul fichier.

# 生成一个 10MB 的测试文件
$ dd if=/dev/urandom of=test.bin bs=1M count=10

# 按每 2MB 拆分
$ split -b 2M test.bin chunk_

# 查看拆分结果
$ ls -lh chunk_*
-rw-r--r-- 1 example example 2.0M May 19 14:32 chunk_aa
-rw-r--r-- 1 example example 2.0M May 19 14:32 chunk_ab
-rw-r--r-- 1 example example 2.0M May 19 14:32 chunk_ac
-rw-r--r-- 1 example example 2.0M May 19 14:32 chunk_ad
-rw-r--r-- 1 example example 2.0M May 19 14:32 chunk_ae

Spécifier le nombre de divisions

Utiliser-npour diviser le fichier uniformément en le nombre spécifié de petits fichiers.

# 将文件均分为 3 份
$ split -n 3 data.txt equal_

# 查看各文件行数
$ wc -l equal_*
  1667 equal_aa
  1667 equal_ab
  1666 equal_ac
  5000 total

Le fichier est réparti aussi uniformément que possible ; un fichier totalisant 5000 lignes est divisé en environ 1667 lignes par fichier.

Lorsque le nombre total de lignes n'est pas divisible de manière égale, les premiers fichiers obtiennent quelques lignes en plus et les derniers fichiers en obtiennent quelques-unes en moins.

Utiliser des suffixes numériques

Le suffixe alphabétique par défaut (aa、ab...) n'est pas assez intuitif ; vous pouvez utiliser-dpour passer aux suffixes numériques.

# 使用数字后缀,并指定后缀长度为 3
$ split -d -a 3 -l 1000 data.txt example_

# 生成的文件名
$ ls example_*
example_000  example_001  example_002  example_003  example_004

Ici, une longueur de suffixe de 3 signifie que jusqu'à 1000 fichiers sont pris en charge (de 000 à 999). Lors du découpage en de nombreux petits fichiers, vous pouvez augmenter la valeur de-al'option.

Découper le texte tout en préservant l'intégrité des lignes

Utiliser-Cpour découper selon la taille tout en veillant à ce qu'aucune ligne ne soit tronquée.

# 生成一个包含不同长度行的测试日志
$ for i in $(seq 1 100); do echo "Line $i: EXAMPLE testing data $(head -c $((RANDOM % 50 + 10)) /dev/urandom | base64)"; done > log.txt

# 按 1KB 拆分,同时保持行完整性
$ split -C 1K log.txt log_

# 检查每个文件的最后一行是否完整(都以换行符结尾)
$ for f in log_*; do echo "$f: $(tail -c 1 $f | xxd | grep -c '0a')"; done

-CCela garantit que la dernière ligne de chaque fichier découpé est complète, et que les lignes ne sont jamais coupées en deux.

Fusionner les fichiers découpés

Les fichiers découpés peuvent être fusionnés sans perte pour restaurer le fichier d'origine :

# 合并所有拆分文件,还原为原始文件
$ cat part_* > restored.txt

# 验证合并后的内容与原始文件一致
$ diff data.txt restored.txt && echo "文件一致,合并成功"
文件一致,合并成功

Lors de la fusion,catcat les concatène dans l'ordre alphabétique de l'expansion des jokers du shell, ce qui est exactement l'splitordre dans lequel split génère les fichiers.


FAQ

Les fichiers découpés occupent toujours le même espace disque total que le fichier d'origine (en fait, il y a un certain surcoût de métadonnées du système de fichiers), donc assurez-vous qu'il y a suffisamment d'espace disque libre.

Lors de l'utilisation de suffixes numériques, si le nombre de fichiers découpés dépasse le maximum représentable par la longueur du suffixe (par ex.,-a 2jusqu'à 100 fichiers),splitsplit se terminera avec une erreur. Augmentez la valeur du-aparamètre pour corriger cela.

Si vous devez découper selon un contenu spécifique (comme par un délimiteur),splitsplit ne le prend pas en charge ; utilisez lacsplitcommande csplit à la place.

Lors de la lecture de données depuis l'entrée standard,splitsplit ne peut pas estimer la taille totale, donc l'-noption permettant de spécifier le nombre de découpages ne prend pas en charge le mode d'entrée standard.


Commandes associées

CommandeDescription
catFusionner des fichiers ou afficher le contenu de fichiers
csplitDiviser des fichiers par contenu (expression régulière)
wcCompter les lignes, les mots et les octets dans un fichier
ddConvertir et copier des fichiers, et extraire des données par taille de bloc
headAfficher le début d'un fichier
tailAfficher la fin d'un fichier

Linux 命令大全Référence des commandes Linux

Autres extensions