Linux || 大文件分割成多个小文件

备份的大文件,因为大文件不方便传输,切割成多个小文件。

实验:

    对tar命令打包的1G~5G的压缩文件,进行分割(分卷)成3~5个小文件

分析:

    1.得到10个500M的文本文件,打包成一个大的tar包文件
    2.对tar包文件进行分割成3个小文件

步骤:

    1.如何得到一个大文件?
     编写脚本来完成产生一个100万行的文本文件,产生5个这样的文件
     使用重定向快速生成更加大的文件
     >>
    2.实验tar命令打包
    3.实验split进行分割


第一步:编写脚本big_file.sh

[root@jack 8-21]# vim big_file.sh
[root@jack 8-21]# cat big_file.sh 
#!/bin/bash

for i in {1..100000}
do
    echo "hello,world I am cali, we are learning linux tar split command how to write shell script" >>sc.txt
done

[root@jack 8-21]# bash big_file.sh 

[root@jack 8-21]# ls 
big_file.sh  sc.txt

[root@jack 8-21]# du -sh sc.txt
16M    sc.txt

第二步:使用重定向生成更加大的文件

[root@jack 8-21]# cat sc.txt >sc1.txt
[root@jack 8-21]# cat sc.txt >sc2.txt
[root@jack 8-21]# ls
big_file.sh  sc1.txt  sc2.txt  sc.txt

[root@jack 8-21]# cat sc.txt >>sc3.txt
[root@jack 8-21]# cat sc.txt >>sc3.txt
[root@jack 8-21]# cat sc.txt >>sc3.txt
[root@jack 8-21]# cat sc.txt >>sc3.txt
[root@jack 8-21]# cat sc.txt >>sc3.txt
[root@jack 8-21]# cat sc.txt >>sc3.txt
[root@jack 8-21]# ls
big_file.sh  sc1.txt  sc2.txt  sc3.txt  sc.txt

[root@jack 8-21]# ll -h
总用量 90M
-rw-r--r-- 1 root root  148 8月  21 10:19 big_file.sh
-rw-r--r-- 1 root root 8.5M 8月  21 10:21 sc1.txt
-rw-r--r-- 1 root root 8.5M 8月  21 10:21 sc2.txt
-rw-r--r-- 1 root root  51M 8月  21 10:22 sc3.txt
-rw-r--r-- 1 root root 8.5M 8月  21 10:20 sc.txt
[root@jack 8-21]# cat sc3.txt >>sc4.txt
[root@jack 8-21]# cat sc3.txt >>sc4.txt
[root@jack 8-21]# cat sc3.txt >>sc4.txt
[root@jack 8-21]# cat sc3.txt >>sc4.txt

[root@jack 8-21]# ll -h
总用量 333M
-rw-r--r-- 1 root root  148 8月  21 10:19 big_file.sh
-rw-r--r-- 1 root root 8.5M 8月  21 10:21 sc1.txt
-rw-r--r-- 1 root root 8.5M 8月  21 10:21 sc2.txt
-rw-r--r-- 1 root root  51M 8月  21 10:22 sc3.txt
-rw-r--r-- 1 root root 204M 8月  21 10:23 sc4.txt
-rw-r--r-- 1 root root 8.5M 8月  21 10:20 sc.txt

第三步:把文件移动到一个文件夹里

[root@jack 8-21]# mkdir sc
[root@jack 8-21]# ls
big_file.sh  sc  sc1.txt  sc2.txt  sc3.txt  sc4.txt  sc.txt

[root@jack 8-21]# mv sc* sc
mv: 无法将目录'sc' 移动至自身的子目录'sc/sc' 下
[root@jack 8-21]# ls
big_file.sh  sc

第四步:打包过程

[root@jack 8-21]# tar czf sc.tar.gz sc
[root@jack 8-21]# ls
big_file.sh  sc  sc.tar.gz

[root@jack 8-21]# du -sh sc.tar.gz
976K    sc.tar.gz

[root@jack 8-21]# du -sh sc
281M    sc

使用split进行分割

        1.根据行数
        2.根据大小

选项

    -b 指定分割文件大小
    -d 指定分割文件的后缀为数字
    -a 指定分割文件后缀的长度
    -C 指定每行最大的字节数
    -l 指定每个文件最大的行数

# 将sc.tar.gz文件按照100k为一个文件进行分割
[root@jack 8-21]# split -b 100k -d  -a 1 sc.tar.gz sc.tar.gz.

[root@jack 8-21]# ls
big_file.sh  sc.tar.gz.0  sc.tar.gz.3  sc.tar.gz.6  sc.tar.gz.9
sc            sc.tar.gz.1  sc.tar.gz.4  sc.tar.gz.7
sc.tar.gz     sc.tar.gz.2  sc.tar.gz.5  sc.tar.gz.8

[root@jack changsha]# tar tf sc.tar.gz.1
tar: 它似乎不像是一个 tar 归档文件
tar: 跳转到下一个头
tar: 由于前次错误,将以上次的错误状态退出

# 分割后的10个文件
[root@jack 8-21]# mkdir changsha
[root@jack 8-21]# cd changsha
[root@jack changsha]# ls
sc.tar.gz.0  sc.tar.gz.2  sc.tar.gz.4  sc.tar.gz.6  sc.tar.gz.8
sc.tar.gz.1  sc.tar.gz.3  sc.tar.gz.5  sc.tar.gz.7  sc.tar.gz.9

# 还原
[root@jack changsha]# cat sc.tar.gz.* |tar xz

# 使用cat的命令拼接多个分割好的文件通过管道给tar命令解压
[root@jack changsha]# ls
sc           sc.tar.gz.1  sc.tar.gz.3  sc.tar.gz.5  sc.tar.gz.7  sc.tar.gz.9
sc.tar.gz.0  sc.tar.gz.2  sc.tar.gz.4  sc.tar.gz.6  sc.tar.gz.8

[root@jack changsha]# cd sc
[root@jack sc]# ls
sc1.txt  sc2.txt  sc3.txt  sc4.txt  sc.txt

[root@jack changsha]# cat sc.tar.gz.* >>sc.tar.gz
[root@jack changsha]# ls
sc         sc.tar.gz.0  sc.tar.gz.2  sc.tar.gz.4  sc.tar.gz.6  sc.tar.gz.8
sc.tar.gz  sc.tar.gz.1  sc.tar.gz.3  sc.tar.gz.5  sc.tar.gz.7  sc.tar.gz.9

[root@jack changsha]# du -sh sc.tar.gz
976K    sc.tar.gz

[root@jack changsha]# tar tf sc.tar.gz
sc/
sc/sc1.txt
sc/sc2.txt
sc/sc3.txt
sc/sc4.txt
sc/sc.txt

--exclude 排除
     将/boot目录下的除grub2目录以外的所有文件都备份到/bak目录下叫no-grub2.tar.gz

[root@jack zhang]# tar -zcf /zhang/boot.tar.gz /boot
[root@jack zhang]# tar --exclude=/boot/grub2 -zcf /zhang/no-grub2-boot.tar.gz /boot
[root@jack zhang]# tar --exclude=/boot/{grub2,efi} -zcf /zhang/no-efi-boot.tar.gz /boot
[root@jack zhang]# ls
boot.tar.gz  no-efi-boot.tar.gz  no-grub2-boot.tar.gz

不需要引号引起来

[root@jack zhang]# tar --exclude=/boot/{grub2,loader}  -czf /bak/no-grub2.tar.gz  /boot
tar --exclude=/mydata/log -czf /wag/no_log_mydata.tar.gz /mydata/

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

韩未零

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值