这里推荐一篇实用的文章:《密码安全:如何识别强弱密码,并打造铁壁防线!》,作者:【喵手】。
这篇文章作者主要讲述密码安全是网络世界中的头等大事,它关系到我们每一个人在线活动的安全。从强密码到多因素认证,每一层防护都不可忽视。通过使用强密码和启用多因素认证,你能有效阻挡黑客的攻击,守护自己的个人信息和财产安全。
分割文件场景很常见,尤其是在日志解析或者查阅日志信息时。在我们日常的工作中,传输文件很常见,在进行文件传输的过程中,因为网络传输速率和文件内容大小的限制,经常会遇到文件传输失败的情况。针对文件传输失败的情况。大文件由于其传输时间长,一旦传输失败,重新传输费时且不一定能保证再次传输成功。针对这种情况,可以考虑将文件分割成小文件的方式进行传输,减少因传输失败或传输大小限制导致的问题。本文就是讲述如何拆分文件后再进行传输,可提升在工作中的效率。
此处我这里准备一个测试文件 test**.sql
,31886行,大小 24083097 字节(大约 24.1MB,此处为了方便后续测试使用)。文件信息如下:
在MacOS上使用split就更舒服了,应该是更简单、简洁、简便了。同样使用 --help
命令来查看帮助命令(其实,在macOS这里,可以使用 -h, --h, -he,-hel ,--he 等等不规则的来查询帮助
)。
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 [分割方式] [新文件前缀长度/深度] [需要被分割的文件/文件路径 [新文件前缀名称]]
【实践】
将一个大文件切分成多个小文件,每个小文件包含指定数量的行。此处我按照 1000行为一个目标文件
来分割,由于每一个行的大小不等,所以分割出来的每一个文件大小也会不等,这个毋庸置疑。分割后的文件用 test_lc_
来标识,以区分源文件。
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 $
【验证】
为了验证脚本执行的效果,下面看看被分割后的文件中的行数
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,取整数。
将一个大文件切分成多个小文件,每个小文件包含固定大小(指的是文件字节大小)。此处我是按照新产生的文件为每个5M为大小进行分割,则产生5个文件。
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 $
可选择的文件大小的单位有(不区分大小写) :
K|k
,每个文件多少KBM|m
,每个文件多少MBG|g
,每个文件多少GB将一个大文件切分成多个小文件,按照固定的文件数量来分割。此处我想将test03.sql 分割为3个文件。
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 分割方法
可以理解为相互或者相向的。
-p
是其中一个不太常用的选项,但在某些特定场景下可能很有用。-p 选项的作用是按每个输出文件的大小(默认是 1000 行)来分割文件,并且尽量保持每个分割后的文件包含完整的、未分割的行。也就是说,如果某一行的内容在分割点附近,那么这一行会完整地出现在某一个文件中,而不是被分割到两个文件中。
一个很有意思的事情,其实我在写这篇笔记时,先在macOS上做的测试,一开始只是按照说明进行测试,后续又在 GUN/Linux
上面做了测试,发现多了一个隐藏的参数并没有在macOS里面的 --help
中说明,那就是 -d
参数。这一章节是后续补充的内容,也希望在学习或者实践时多留意下。
【含义】
这个参数的意思其实也很简单,如果你熟悉或做过正则表达式,那么就不会陌生了,他就是将文件的默认的 aa* 格式
改为 00* 数字格式
,通俗一些就是 将原来默认的 字母格式
修改为 数字格式
。这也是产生文件的后缀类型。举例子可能更好理解:
原来默认情况下,产生的文件为下面的格式(默认两位数开始编码)
aa
ab
ac
ad
……
使用 -d 参数
后,产生的文件为下面的格式(默认两位数开始编码)
00
01
02
03
……
在我们日常的工作中,传输文件很常见,在进行文件传输的过程中,因为网络传输速率和文件内容大小的限制,经常会遇到文件传输失败的情况。针对文件传输失败的情况。大文件由于其传输时间长,一旦传输失败,重新传输费时且不一定能保证再次传输成功。针对这种情况,可以考虑将文件分割成小文件的方式进行传输,减少因传输失败或传输大小限制导致的问题。本文就是讲述如何拆分文件后再进行传输,可提升在工作中的效率。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。