好事发生这里推荐一篇实用的文章:《密码安全:如何识别强弱密码,并打造铁壁防线!》,作者:【喵手】。

这篇文章作者主要讲述密码安全是网络世界中的头等大事,它关系到我们每一个人在线活动的安全。从强密码到多因素认证,每一层防护都不可忽视。通过使用强密码和启用多因素认证,你能有效阻挡黑客的攻击,守护自己的个人信息和财产安全。

引言分割文件场景很常见,尤其是在日志解析或者查阅日志信息时。在我们日常的工作中,传输文件很常见,在进行文件传输的过程中,因为网络传输速率和文件内容大小的限制,经常会遇到文件传输失败的情况。针对文件传输失败的情况。大文件由于其传输时间长,一旦传输失败,重新传输费时且不一定能保证再次传输成功。针对这种情况,可以考虑将文件分割成小文件的方式进行传输,减少因传输失败或传输大小限制导致的问题。本文就是讲述如何拆分文件后再进行传输,可提升在工作中的效率。

split使用场景分割文本,在有些语言中可分割字符串、分割文本、分割视频等分割日志文件,协助运维同事排查日志报错等分割后备份文件,用于增量存储数据等处理大型数据集文件等测试文件信息此处我这里准备一个测试文件 test**.sql ,31886行,大小 24083097 字节(大约 24.1MB,此处为了方便后续测试使用)。文件信息如下:

实践操作在MacOS上使用split就更舒服了,应该是更简单、简洁、简便了。同样使用 --help 命令来查看帮助命令(其实,在macOS这里,可以使用 -h, --h, -he,-hel ,--he 等等不规则的来查询帮助)。

代码语言:javascript复制Aion@Macbook ~ $ split --help

split: illegal option -- -

usage: split [-l line_count] [-a suffix_length] [file [prefix]]

split -b byte_count[K|k|M|m|G|g] [-a suffix_length] [file [prefix]]

split -n chunk_count [-a suffix_length] [file [prefix]]

split -p pattern [-a suffix_length] [file [prefix]]

Aion@Macbook ~ $在MacOS的命令中,有四种分割情况,分别是按行数量分割、按字节数量分割、按块或组数量分割、按模式/方式分割,其中默认的分割方式为按行数量分割。无论是哪一种分割方式,格式统一为如下方式:

split [分割方式] [新文件前缀长度/深度] [需要被分割的文件/文件路径 [新文件前缀名称]]

1 按行数量分割【实践】

将一个大文件切分成多个小文件,每个小文件包含指定数量的行。此处我按照 1000行为一个目标文件来分割,由于每一个行的大小不等,所以分割出来的每一个文件大小也会不等,这个毋庸置疑。分割后的文件用 test_lc_ 来标识,以区分源文件。

代码语言:javascript复制Aion@Macbook split-test $ split -l 1000 test01.sql test_lc_

Aion@Macbook split-test $ ls

test-all.sql test_lc_ab test_lc_af test_lc_aj test_lc_an test_lc_ar test_lc_av test_lc_az test_lc_bd

test.sql test_lc_ac test_lc_ag test_lc_ak test_lc_ao test_lc_as test_lc_aw test_lc_ba test_lc_be

test01.sql test_lc_ad test_lc_ah test_lc_al test_lc_ap test_lc_at test_lc_ax test_lc_bb test_lc_bf

test_lc_aa test_lc_ae test_lc_ai test_lc_am test_lc_aq test_lc_au test_lc_ay test_lc_bc

Aion@Macbook split-test $【验证】

为了验证脚本执行的效果,下面看看被分割后的文件中的行数

代码语言:javascript复制Aion@Macbook split-test $ wc -l test_lc_*

1000 test_lc_aa

1000 test_lc_ab

1000 test_lc_ac

1000 test_lc_ad

1000 test_lc_ae

……此处省略多行

1000 test_lc_bb

1000 test_lc_bc

1000 test_lc_bd

1000 test_lc_be

886 test_lc_bf

31886 total

Aion@Macbook split-test $从上面的结果来看,是按照约定的规则产生每个文件1000行。

注意⚠️:

总文件数量的计算规则为如下(这里说一下这个规则的意思在于后续的规则都大差不多,理解意思就可以了):

总行数 % 设定行数, 如果余数为 0 则 分割文件数 = 总行数 / 设定行数,取整数;

总行数 % 设定行数, 如果余数不为 0 则 分割文件数 = 总行数 / 设定行数 + 1,取整数。

2 按字节数量分割将一个大文件切分成多个小文件,每个小文件包含固定大小(指的是文件字节大小)。此处我是按照新产生的文件为每个5M为大小进行分割,则产生5个文件。

代码语言:javascript复制Aion@Macbook split-test $ split -b 5M test02.sql test_bc_

Aion@Macbook split-test $ ll test_bc_*

-rw-r--r-- 1 Aion staff 5242880 11 14 18:58 test_bc_aa

-rw-r--r-- 1 Aion staff 5242880 11 14 18:58 test_bc_ab

-rw-r--r-- 1 Aion staff 5242880 11 14 18:58 test_bc_ac

-rw-r--r-- 1 Aion staff 5242880 11 14 18:58 test_bc_ad

-rw-r--r-- 1 Aion staff 3111577 11 14 18:58 test_bc_ae

Aion@Macbook split-test $可选择的文件大小的单位有(不区分大小写) :

KB:K|k,每个文件多少KBMB:M|m,每个文件多少MBGB:G|g,每个文件多少GB3 按块或组数量分割将一个大文件切分成多个小文件,按照固定的文件数量来分割。此处我想将test03.sql 分割为3个文件。

代码语言:javascript复制Aion@Macbook split-test $ split -n 3 test03.sql test_cc_

Aion@Macbook split-test $

Aion@Macbook split-test $ ll test_cc_*

-rw-r--r-- 1 Aion staff 8027699 11 14 19:05 test_cc_aa

-rw-r--r-- 1 Aion staff 8027699 11 14 19:05 test_cc_ab

-rw-r--r-- 1 Aion staff 8027699 11 14 19:05 test_cc_ac

Aion@Macbook split-test $

Aion@Macbook split-test $ ll test03.sql

-rw-r--r--@ 1 Aion staff 24083097 11 14 19:05 test03.sql

Aion@Macbook split-test $由于此时从文件大小上正好可以分割为3个文件,所以也只能看到3个文件,chunk_count分割方法同 byte_count 分割方法可以理解为相互或者相向的。

4 按模式/方式/格式分割-p是其中一个不太常用的选项,但在某些特定场景下可能很有用。-p 选项的作用是按每个输出文件的大小(默认是 1000 行)来分割文件,并且尽量保持每个分割后的文件包含完整的、未分割的行。也就是说,如果某一行的内容在分割点附近,那么这一行会完整地出现在某一个文件中,而不是被分割到两个文件中。

5 隐藏参数说明一个很有意思的事情,其实我在写这篇笔记时,先在macOS上做的测试,一开始只是按照说明进行测试,后续又在 GUN/Linux 上面做了测试,发现多了一个隐藏的参数并没有在macOS里面的 --help 中说明,那就是 -d 参数。这一章节是后续补充的内容,也希望在学习或者实践时多留意下。

【含义】

这个参数的意思其实也很简单,如果你熟悉或做过正则表达式,那么就不会陌生了,他就是将文件的默认的 aa* 格式改为 00* 数字格式,通俗一些就是 将原来默认的 字母格式 修改为 数字格式。这也是产生文件的后缀类型。举例子可能更好理解:

原来默认情况下,产生的文件为下面的格式(默认两位数开始编码)

代码语言:javascript复制aa

ab

ac

ad

……使用 -d 参数 后,产生的文件为下面的格式(默认两位数开始编码)

代码语言:javascript复制00

01

02

03

……

总结在我们日常的工作中,传输文件很常见,在进行文件传输的过程中,因为网络传输速率和文件内容大小的限制,经常会遇到文件传输失败的情况。针对文件传输失败的情况。大文件由于其传输时间长,一旦传输失败,重新传输费时且不一定能保证再次传输成功。针对这种情况,可以考虑将文件分割成小文件的方式进行传输,减少因传输失败或传输大小限制导致的问题。本文就是讲述如何拆分文件后再进行传输,可提升在工作中的效率。