如何在Linux中把一个文件分成若干部分

654 阅读5分钟

本教程解释了如何在Linux中按大小轻松地将文件分割成几个部分,几个文件,内容,以及更多的选项。阅读本文后,你会知道如何使用 分割csplit命令分割文件,以及如何将文件碎片合并或连接起来。

在Linux中如何按大小分割文件

对于本教程的第一个例子,我将使用一个名为WIN10X64.ISO的5GB Windows ISO镜像。要了解你要分割的文件大小,你可以使用 du -h命令,如下面的屏幕截图所示。

du -h <FileName>

如你所见,文件大小为5GB。要把它分割成5个文件,每个1GB,你可以使用 分割命令,后面加一个 -b标志和你想分割的文件大小。定义GB的大小单位 G定义了GB的大小单位,可以替换为 M代替兆字节或 B代替。

split -b 1G WIN10X64PRO.ISO

正如你所看到的,ISO被分割成5个文件,命名为xaa、xab、xac、xad和xae

在默认情况下,该 分割命令以前面的例子命名生成的文件,其中xaa是第一部分,xab是第二部分,xac是第三部分,等等。如下面的例子所示,你可以改变这一点,定义一个名称,留下默认名称作为扩展名。

split -b 1G WIN10X64PRO.ISO Windows.

正如你所看到的,所有的文件都被命名为Windows.* ,是split命令给出的名字的扩展名,这使得我们可以知道文件的顺序。

在使用split命令时,你可以为该命令实现verbosity,以打印进度,如下面的截图所示。

split --verbose -b 1G WIN10X64PRO.ISO Windows.

正如你所看到的,进度输出显示了文件分割的阶段。下一个例子显示了如何将文件分割成MB单位。 该文件是一个85MB的文件。

split --verbose -b 20M virtualbox.deb virtualbox.deb.

如何在Linux中使用csplit按内容分割文件。

在某些情况下,用户可能想根据文件的内容来分割文件。对于这种情况,前面解释的分割命令并不有用。实现这一目的的替代方法是 csplit命令。

在本教程中,你将学习如何在每次发现特定的正则表达式时分割一个文件。我们将使用一本书,并将其分为几个章节。

正如你在下面的图片中看到的,我们有4个章节(它们被编辑过,以便你能看到章节的划分)。假设你想把每一章放入一个不同的文件。为此,我们要使用的正则表达式是 "Chapter"。

我知道这本书有4个章节,所以我们需要指定我们想要的分割的数量,以防止错误。在下面的例子中,我解释了如何在不知道正则表达式或分割数的情况下进行分割。但在这个例子中,我们知道有4个章节;因此,我们需要将文件分割3次。

运行csplit,然后输入你想要分割的文件,斜线之间的正则表达式,以及大括号之间的分割次数,如下例所示。

csplit linuxhint.txt /Chapter/ {3}

我们看到的输出是每个文件片的字节数。

正如你所看到的,有5个文件被创建,第1章之前的空位也被分割。

这些文件的名称与使用前面解释的分割命令时一样。让我们看看它们是如何被分割的。

第一个文件,xx00是空的,它是 "Chapter"正则表达式第一次出现之前的空位,文件被分割了。

第二块只正确显示了第一章。

第三件显示第二章。

第四块显示了第三章。

而最后一块则显示了第四章。

正如前面解释的,指定正则表达式的数量是为了防止出现错误的结果。默认情况下,如果我们不指定分割的数量,csplit将只切割一次文件。

下面的例子显示了在没有指定分割数的情况下执行前面的命令。

csplit linuxhint.txt /Chapter/

正如你所看到的,由于我们没有指定分割的数量,只产生了一个分割和两个文件。

另外,如果你输入了错误的分割数量,例如,6个分割只有4个正则表达式,你会得到一个错误,而且不会发生分割,如下例所示。

那么,当内容太长,而你又不知道你的内容中有多少个正则表达式要分割时,该怎么办呢?在这种情况下,我们需要实现通配符。

通配符将产生许多片断作为文件中发现的正则表达式,而不需要你去指定它们。

csplit linuxhint.txt /Chapter/ {*}

正如你所看到的,该文件被正确地分割了。

如何将文件合并或连接回来。

现在你知道如何根据大小或内容来分割文件了。下一步是将文件合并或接回。这是一项简单的任务,使用 cat命令来完成。

正如你在下面看到的,如果我们使用cat和通配符读取所有文件的碎片,那么 cat命令将按照文件名的字母顺序排列它们。

cat xx*

正如你所看到的,猫能够对文件进行正确排序。连接或合并文件包括导出这个结果;你可以像下面的例子那样做,其中combinedfile是合并后的文件名。

cat xx* > combinedfile

正如你在下图中看到的,文件被正确地合并了。

less combinedfile

总结

正如你所看到的,在Linux中把文件分割成几个部分是非常容易的,你只需要知道什么是适合你的任务的工具。任何Linux用户都值得学习这些命令和它们的优点,例如,在通过不稳定的连接或通过限制文件大小的渠道共享文件时。这两个工具都有许多额外的功能,在本教程中没有解释,你可以在它们的手册页上阅读。