split分割命令

split命令的作用是根据设置的子文件大小或者行数将大文件分割为小文件,默认的子文件后缀为2个字母,起始值为aa,按照aa,ab,ac的顺序依次递增。当然如果你想要以数字为后缀,可以使用-d参数,起始值为0,-a参数可以设置后缀长度,默认后缀长度为2,这也就是为什么不使用后缀设置参数时,子文件默认后缀是以aa开始的递增值。

 

使用-b参数将文件分割为最大容量为3k的小文件(-b参数的默认单位是byte):

1
2
3
4
[whx@localhost ~]$ split -b 3k./test/man.test.config  man.config.split
[whx@localhost ~]$ ll man.config.split*
-rw-rw-r--. 1 whx whx 3072 Aug 24 18:45man.config.splitaa
-rw-rw-r--. 1 whx whx  985 Aug 24 18:45 man.config.splitab

 

查看子文件大小:

1
2
3
[whx@localhost ~]$ ll -lhtman.config.split*
-rw-rw-r--. 1 whx whx 3.0K Aug 24 18:50man.config.splitaa
-rw-rw-r--. 1 whx whx  985 Aug 24 18:50 man.config.splitab

 

使用-l参数将文件按照每个子文件最多40行数据来分割:

1
2
3
4
5
6
[whx@localhost ~]$ split -l 40  ./test/man.test.config  man.config.split
[whx@localhost ~]$ llman.config.split*                                
-rw-rw-r--. 1 whx whx 1167 Aug 24 18:47man.config.splitaa
-rw-rw-r--. 1 whx whx 1456 Aug 24 18:47man.config.splitab
-rw-rw-r--. 1 whx whx 1088 Aug 24 18:47man.config.splitac
-rw-rw-r--. 1 whx whx  346 Aug 24 18:47 man.config.splitad

查看每个子文件的行数:

1
2
3
4
5
6
[whx@localhost ~]$ wc -l man.config.splitaaman.config.splitab man.config.splitac man.config.splitad
  40man.config.splitaa
  40man.config.splitab
  40man.config.splitac
  11man.config.splitad
 131total

 

使用-C参数在保证每行数据的完整性的情况下,将文件分割为最大容量为500字节的小文件:

1
[whx@localhost ~]$ split -C 500    ./test/man.test.config  man.config.split

 

同样使用-b将文件分割为最大容量为500字节的小文件,并将子文件后缀改为用由000开始的3个数字来表示:

1
[whx@localhost ~]$ split -b 500 -d -a3   ./test/man.test.config  man.config.split

比较使用-C和-b的差别:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[whx@localhost ~]$ ll man.config.spli*                                           
-rw-rw-r--. 1 whx whx 500 Aug 24 19:03man.config.split000
-rw-rw-r--. 1 whx whx 500 Aug 24 19:03man.config.split001
-rw-rw-r--. 1 whx whx 500 Aug 24 19:03man.config.split002
-rw-rw-r--. 1 whx whx 500 Aug 24 19:03man.config.split003
-rw-rw-r--. 1 whx whx 500 Aug 24 19:03man.config.split004
-rw-rw-r--. 1 whx whx 500 Aug 24 19:03man.config.split005
-rw-rw-r--. 1 whx whx 500 Aug 24 19:03man.config.split006
-rw-rw-r--. 1 whx whx 500 Aug 24 19:03man.config.split007
-rw-rw-r--. 1 whx whx  57 Aug 24 19:03 man.config.split008
-rw-rw-r--. 1 whx whx 441 Aug 24 19:02man.config.splitaa
-rw-rw-r--. 1 whx whx 487 Aug 24 19:02man.config.splitab
-rw-rw-r--. 1 whx whx 465 Aug 24 19:02man.config.splitac
-rw-rw-r--. 1 whx whx 488 Aug 24 19:02man.config.splitad
-rw-rw-r--. 1 whx whx 474 Aug 24 19:02man.config.splitae
-rw-rw-r--. 1 whx whx 496 Aug 24 19:02man.config.splitaf
-rw-rw-r--. 1 whx whx 454 Aug 24 19:02man.config.splitag
-rw-rw-r--. 1 whx whx 459 Aug 24 19:02man.config.splitah
-rw-rw-r--. 1 whx whx 293 Aug 24 19:02man.config.splitai

从上面的结果可以看出,使用-b参数,子文件数量是8个,而且每个子文件都是严格按照大小为500字节来分割的,而是用-C参数,子文件数量是9个,每一个子文件大小都小于设置的文件大小数值500字节的,这是因为使用-C不会将一行完整的数据分割成两行,来满足设置的文件大小值,而-b则刚好相反,这也是一般情况下使用-C分割出来的子文件数量会比使用-b分割出来的子文件数量多的原因。

 

将多个子文件合并为一个大文件可以使用>>,如果你想在合并之后自动显示合并后大文件的内容也可以使用tee -a来实现。

1
2
3
4
5
6
7
8
9
10
11
12
[whx@localhost ~]$ cat man.config.splita*>> man.config.b
[whx@localhost ~]$ ll man.config.*
-rw-rw-r--. 1 whx whx 4057 Aug 24 19:21man.config.b
  
[whx@localhost ~]$ cat man.config.split0*|tee -a man.config.c
#
# Generated automatically from man.conf.inby the
# configure script.
#
# man.conf from man-1.6f
#
..

 

使用这两种方式最终合并出来的大文件是完全一致的:

1
2
3
[whx@localhost ~]$ ll man.config.*                            
-rw-rw-r--. 1 whx whx4057 Aug 24 19:21 man.config.b
-rw-rw-r--.1 whx whx 4057 Aug 24 19:21 man.config.c

 

合并之后可以看到,之前分割出来的小文件依然是存在的,如果你不需要这些小文件可以手动去删除。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[whx@localhost ~]$ ll man.config*   
-rw-rw-r--. 1 whx whx 4057 Aug 24 19:21man.config.b
-rw-rw-r--. 1 whx whx 4057 Aug 24 19:21man.config.c
-rw-rw-r--. 1 whx whx  500 Aug 24 19:03 man.config.split000
-rw-rw-r--. 1 whx whx  500 Aug 24 19:03 man.config.split001
-rw-rw-r--. 1 whx whx  500 Aug 24 19:03 man.config.split002
-rw-rw-r--. 1 whx whx  500 Aug 24 19:03 man.config.split003
-rw-rw-r--. 1 whx whx  500 Aug 24 19:03 man.config.split004
-rw-rw-r--. 1 whx whx  500 Aug 24 19:03 man.config.split005
-rw-rw-r--. 1 whx whx  500 Aug 24 19:03 man.config.split006
-rw-rw-r--. 1 whx whx  500 Aug 24 19:03 man.config.split007
-rw-rw-r--. 1 whx whx   57 Aug 24 19:03 man.config.split008
-rw-rw-r--. 1 whx whx  441 Aug 24 19:02 man.config.splitaa
-rw-rw-r--. 1 whx whx  487 Aug 24 19:02 man.config.splitab
-rw-rw-r--. 1 whx whx  465 Aug 24 19:02 man.config.splitac
-rw-rw-r--. 1 whx whx  488 Aug 24 19:02 man.config.splitad
-rw-rw-r--. 1 whx whx  474 Aug 24 19:02 man.config.splitae
-rw-rw-r--. 1 whx whx  496 Aug 24 19:02 man.config.splitaf
-rw-rw-r--. 1 whx whx  454 Aug 24 19:02 man.config.splitag
-rw-rw-r--. 1 whx whx  459 Aug 24 19:02 man.config.splitah
-rw-rw-r--. 1 whx whx  293 Aug 24 19:02 man.config.splitai



本文转自 天黑顺路 51CTO博客,原文链接:http://blog.51cto.com/mjal01/1959227,如需转载请自行联系原作者
### Linux `split` 命令的文件压缩与分割 在 Linux 环境下,`split` 是一个功能强大的命令行工具,主要用于将大文件分割成更小的部分。虽然它本身并不具备压缩的功能,但它可以与其他工具(如 tar 和 gzip)结合使用,实现对大型文件的高效管理。 #### 创建 `.tar` 文件并分割 为了分割一个较大的文件或目录,通常会先将其打包为 `.tar` 或其他类型的存档文件,然后再使用 `split` 进行分割。以下是具体的流程: 1. **创建 `.tar` 存档文件** 如果目标是一个目录或者一组文件,则需要先通过 `tar` 将其打包。 ```bash tar -cvf archive.tar /path/to/directory_or_files ``` 2. **使用 `split` 分割 `.tar` 文件** 接下来,可以通过 `split` 对生成的 `.tar` 文件进行分割。例如,按照每部分不超过 10MB 的大小进行分割: ```bash split -b 10M archive.tar archive_part_ ``` 上述命令将会生成一系列名为 `archive_part_aa`, `archive_part_ab`, ... 的文件[^1]。 3. **恢复原始文件** 当需要重新组合这些分割后的文件时,可以使用 `cat` 命令将它们拼接回原来的 `.tar` 文件: ```bash cat archive_part_* > restored_archive.tar ``` 随后,可利用 `tar` 解压该文件以还原原始内容: ```bash tar -xvf restored_archive.tar ``` #### 按照行数分割文本文件 除了基于文件大小外,还可以依据指定的行数来分割文件。这对于处理日志或其他结构化数据尤为有用。例如,假设有一个包含大量记录的日志文件 `log.txt`,希望将其按每 500 行分成若干个小文件,可以执行如下操作: ```bash split -l 500 log.txt log_split_ ``` 这会产生诸如 `log_split_aa`, `log_split_ab` 等子文件[^4]。 #### 注意事项 当涉及到远程传输时需特别注意文件完整性问题;比如采用 `rz` 工具上传过程中可能会因为网络原因造成文件尺寸异常从而引发解压错误等情况发生,在这种情况下应该验证本地源文件以及服务端接收版本的一致性后再做进一步的操作[^3]。 ```python import os os.system('split -b 10M large_file.tar part_') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值