Linux || 大文件分割成多个小文件
linux-dash
A beautiful web dashboard for Linux
项目地址:https://gitcode.com/gh_mirrors/li/linux-dash
免费下载资源
·
大文件分割
备份的大文件,因为大文件不方便传输,切割成多个小文件。
实验
对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.根据大小(字节)
-b 根据字节来截取,指定分割文件大小。
-C 根据字节来截取,(尽量考虑整行的输出),指定每行最大的字节数。
-a 指定生成的文件名后缀的长度,默认为2。
2.根据行数
-5
-d 使用数字作为输出文件名的后缀。
-l 按行分割,指定每个文件最大的行数。
案例
[root@ansible_nfs cjh3]# split -5 passwd
[root@ansible_nfs cjh3]# ls
passwd xaa xab xac xad xae xaf
[root@ansible_nfs cjh3]# cat xaa
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@ansible_nfs cjh3]# split -5 passwd sc_
[root@ansible_nfs cjh3]# ls
passwd sc_aa sc_ab sc_ac sc_ad sc_ae sc_af
[root@ansible_nfs cjh3]# split -l 10 passwd -d -a 3 sanchuang_
[root@ansible_nfs cjh3]# ls
passwd sanchuang_000 sanchuang_001 sanchuang_002
[root@ansible_nfs cjh3]# cat sanchuang_001
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
chenyamin:x:1000:1000::/home/chenyamin:/bin/bash
[root@ansible_nfs cjh3]# split -b 10 passwd -d cs_
[root@ansible_nfs cjh3]# ls
cs_00 cs_06 cs_12 cs_18 cs_24 cs_30 cs_36 cs_42 cs_48 cs_54 cs_60 cs_66 cs_72 cs_78 cs_84 cs_9000 cs_9006 cs_9012 cs_9018 cs_9024 cs_9030 cs_9036 cs_9042 cs_9048 cs_9054 passwd
cs_01 cs_07 cs_13 cs_19 cs_25 cs_31 cs_37 cs_43 cs_49 cs_55 cs_61 cs_67 cs_73 cs_79 cs_85 cs_9001 cs_9007 cs_9013 cs_9019 cs_9025 cs_9031 cs_9037 cs_9043 cs_9049 cs_9055
cs_02 cs_08 cs_14 cs_20 cs_26 cs_32 cs_38 cs_44 cs_50 cs_56 cs_62 cs_68 cs_74 cs_80 cs_86 cs_9002 cs_9008 cs_9014 cs_9020 cs_9026 cs_9032 cs_9038 cs_9044 cs_9050 cs_9056
cs_03 cs_09 cs_15 cs_21 cs_27 cs_33 cs_39 cs_45 cs_51 cs_57 cs_63 cs_69 cs_75 cs_81 cs_87 cs_9003 cs_9009 cs_9015 cs_9021 cs_9027 cs_9033 cs_9039 cs_9045 cs_9051 cs_9057
cs_04 cs_10 cs_16 cs_22 cs_28 cs_34 cs_40 cs_46 cs_52 cs_58 cs_64 cs_70 cs_76 cs_82 cs_88 cs_9004 cs_9010 cs_9016 cs_9022 cs_9028 cs_9034 cs_9040 cs_9046 cs_9052 cs_9058
cs_05 cs_11 cs_17 cs_23 cs_29 cs_35 cs_41 cs_47 cs_53 cs_59 cs_65 cs_71 cs_77 cs_83 cs_89 cs_9005 cs_9011 cs_9017 cs_9023 cs_9029 cs_9035 cs_9041 cs_9047 cs_9053 cs_9059
# 合并
[root@ansible_nfs cjh3]# cat cs_* >cs_passwd
[root@ansible_nfs cjh3]# diff cs_passwd passwd
[root@ansible_nfs cjh3]# echo $?
0
[root@ansible_nfs cjh3]# md5sum passwd
e72d4e878d989d854a73c45267b39bcf passwd
[root@ansible_nfs cjh3]# md5sum cs_passwd
e72d4e878d989d854a73c45267b39bcf cs_passwd
使用
# 将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
tar
tar 是类 Unix 系统中广泛使用的命令,用于归档多个文件或目录到单个归档文件中,并且归档文件可以进一步使用 gzip 或者 bzip2 等技术进行压缩。
--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/
GitHub 加速计划 / li / linux-dash
6
1
下载
A beautiful web dashboard for Linux
最近提交(Master分支:4 个月前 )
186a802e
added ecosystem file for PM2 4 年前
5def40a3
Add host customization support for the NodeJS version 4 年前
更多推荐
已为社区贡献3条内容
所有评论(0)