当前位置: 代码网 > 服务器>服务器>Linux > Linux下实现大文件切割与合并实战

Linux下实现大文件切割与合并实战

2026年04月13日 Linux 我要评论
在日常工作中,我们经常会遇到需要传输超过4gb的大文件(如iso镜像、数据库备份、日志文件等)到fat32文件系统的存储设备(如u盘、移动硬盘)上,但由于fat32文件系统本身的设计限制,单个文件最大

在日常工作中,我们经常会遇到需要传输超过4gb的大文件(如iso镜像、数据库备份、日志文件等)到fat32文件系统的存储设备(如u盘、移动硬盘)上,但由于fat32文件系统本身的设计限制,单个文件最大只能支持4gb,这导致大文件无法直接拷贝。

本文将详细介绍如何使用linux系统自带的splitcat命令,轻松实现大文件的切割与合并,彻底告别fat32的文件大小限制。

一、背景与痛点

1.1 为什么需要切割文件?

fat32文件系统有一个众所周知的限制:单个文件大小不能超过4gb。这意味着:

  • 你下载的linux发行版iso镜像(通常4-8gb)无法直接拷贝到fat32格式的u盘
  • 数据库备份文件(可能几十gb)无法通过fat32移动硬盘转移
  • 大型视频文件或软件安装包需要拆分后才能存储

1.2 解决方案

使用linux系统自带的split命令将大文件切割成多个小于4gb的小文件,传输到目标机器后,再用cat命令合并还原。整个过程无损、快速、简单。

二、split命令详解

2.1 基本语法

split [选项] [输入文件] [输出前缀]

2.2 常用选项

选项说明
-b size按指定大小切割,单位支持k、m、g(如 -b 450m
-d使用数字后缀(如 0001),而不是默认的字母后缀
-a n指定后缀长度为n(默认2),如 -a 3 生成 000001
-l number按行数切割(适合文本文件)

2.3 切割示例对比

# 方式1:切割后压缩(边压缩边切割)
tar -zcf - /path/to/largefile.iso | split -b 450m -d - output.tar.gz.

# 方式2:直接切割原始文件(推荐,简单直接)
split -b 450m -d largefile.iso largefile.iso.

三、实战场景:切割与合并iso镜像

假设我们有一个大小为6.5gb的麒麟操作系统iso文件:

kylin-server-10-sp1-release-build20-20210518-arm64.iso

3.1 切割操作

方案一:直接切割(本次实战采用)

# 将iso切割成450mb大小的多个文件
split -b 450m -d kylin-server-10-sp1-release-build20-20210518-arm64.iso kylin-server-10-sp1-release-build20-20210518-arm64.iso.

执行效果:

$ ls -lh
total 6.5g
-rw-r--r-- 1 root root 450m  kylin-server-10-sp1-release-build20-20210518-arm64.iso.00
-rw-r--r-- 1 root root 450m  kylin-server-10-sp1-release-build20-20210518-arm64.iso.01
-rw-r--r-- 1 root root 450m  kylin-server-10-sp1-release-build20-20210518-arm64.iso.02
-rw-r--r-- 1 root root 450m  kylin-server-10-sp1-release-build20-20210518-arm64.iso.03
-rw-r--r-- 1 root root 450m  kylin-server-10-sp1-release-build20-20210518-arm64.iso.04
-rw-r--r-- 1 root root 450m  kylin-server-10-sp1-release-build20-20210518-arm64.iso.05
...
-rw-r--r-- 1 root root 350m  kylin-server-10-sp1-release-build20-20210518-arm64.iso.14

方案二:边压缩边切割(节省空间)

# 先压缩再切割,适合对压缩率敏感的场景
tar -zcf - /home/package/kylin-server-10-sp1-release-build20-20210518-arm64.iso | split -b 450m -d - kylin-server-10-sp1.tar.gz.

方案三:macos系统示例

# macos下切割centos iso为3gb大小的文件
split -b 3000m centos-7-x86_64-dvd-2009.iso centos-7-x86_64-dvd-2009.iso.

3.2 上传切割文件

将切割生成的多个小文件拷贝到fat32格式的u盘或移动硬盘:

# 复制所有切割文件到目标存储设备
cp kylin-server-10-sp1-release-build20-20210518-arm64.iso.* /media/usb/

提示:每个小文件都小于450mb,完全可以正常写入fat32文件系统。

3.3 合并还原

在目标服务器上,将所有切割片段合并成完整文件。

方式一:直接合并(对应直接切割方式)

# 合并所有片段,还原完整文件
cat kylin-server-10-sp1-release-build20-20210518-arm64.iso.* > kylin-server-10-sp1-release-build20-20210518-arm64.iso

# 验证md5(可选,确保文件完整性)
md5sum kylin-server-10-sp1-release-build20-20210518-arm64.iso

方式二:合并并解压(对应边切割边压缩方式)

# 合并并解压一步完成
cat kylin-server-10-sp1.tar.gz.* | tar -zxv

3.4 验证合并结果

# 查看iso文件信息
$ ls -lh kylin-server-10-sp1-release-build20-20210518-arm64.iso
-rw-r--r-- 1 root root 6.5g kylin-server-10-sp1-release-build20-20210518-arm64.iso

# 尝试挂载验证(linux)
mount -o loop kylin-server-10-sp1-release-build20-20210518-arm64.iso /mnt/iso
ls /mnt/iso

四、高级用法与技巧

4.1 指定切割文件大小单位

# 按字节(默认)
split -b 1048576 largefile chunk_    # 1mb

# 按kb
split -b 1024k largefile chunk_      # 1024kb

# 按mb
split -b 100m largefile chunk_       # 100mb

# 按gb(注意小写g)
split -b 2g largefile chunk_         # 2gb

4.2 自定义后缀长度

# 生成3位数字后缀(000、001、002...)
split -b 450m -d -a 3 largefile.iso largefile.iso.

# 输出结果:largefile.iso.000、largefile.iso.001...

4.3 按行数切割文本文件

# 将日志文件按10万行切割
split -l 100000 app.log app.log.part_

4.4 带进度条的合并(使用pv工具)

# 安装pv(pipe viewer)工具
yum install pv -y   # centos/rhel
apt install pv -y   # ubuntu/debian

# 带进度条的合并
pv kylin-server-10-sp1-release-build20-20210518-arm64.iso.* > kylin-server-10-sp1-release-build20-20210518-arm64.iso

五、常见问题与注意事项

5.1 切割后文件无法合并

原因:切割命令和合并命令方式不匹配(如压缩切割和直接切割混用)

解决:保持一致的处理方式

  • 直接切割 → 直接合并
  • 压缩切割 → 解压合并

5.2 合并后文件md5不一致

原因

  • 传输过程中部分片段损坏
  • 切割时使用了不同的切割大小

解决

# 合并后重新计算md5并与原文件比对
md5sum original.iso
md5sum restored.iso

# 如不一致,重新传输损坏的片段并合并

5.3 磁盘空间不足

注意:切割和合并过程需要额外的磁盘空间:

  • 切割:需要原文件大小 + 切割后文件大小
  • 合并:需要所有片段大小 + 合并后文件大小

建议在操作前确保有至少2倍于原文件的可用空间。

5.4 windows系统如何处理?

如果目标机器是windows系统:

  1. 使用git bash:内置了cat命令,可用同样方式合并
  2. 使用第三方工具:如7-zip支持合并split分割的文件
  3. 使用powershell
# powershell合并文件
get-content kylin-server-10-sp1.iso.* -asbytestream | set-content kylin-server-10-sp1.iso -asbytestream

六、自动化脚本示例

6.1 一键切割脚本

#!/bin/bash
# split_file.sh - 大文件切割脚本

file=$1
size=${2:-450m}  # 默认450m
prefix=${file}.   # 前缀

if [ -z "$file" ]; then
    echo "用法: $0 <文件名> [切割大小]"
    echo "示例: $0 ubuntu.iso 2g"
    exit 1
fi

echo "正在切割 $file 为 ${size} 大小的文件..."
split -b $size -d $file ${prefix}
echo "切割完成!生成的文件:"
ls -lh ${prefix}*

6.2 一键合并脚本

#!/bin/bash
# merge_file.sh - 文件合并脚本

prefix=$1
output=$2

if [ -z "$prefix" ] || [ -z "$output" ]; then
    echo "用法: $0 <文件前缀> <输出文件名>"
    echo "示例: $0 ubuntu.iso. ubuntu.iso"
    exit 1
fi

echo "正在合并 ${prefix}* 为 $output ..."
cat ${prefix}* > $output
echo "合并完成!"
ls -lh $output

七、总结

通过本文的实战演示,我们掌握了:

操作命令适用场景
切割split -b 450m -d file.iso file.iso.标准切割,简单可靠
压缩切割tar -zcf - file.iso | split -b 450m -d - out.tar.gz.节省存储空间
合并cat file.iso.* > file.iso还原原始文件
合并解压cat out.tar.gz.* | tar -zxv合并并解压一步完成

核心要点:

  1. split + cat 是linux内置命令,无需安装额外软件
  2. ✅ 切割后的小文件可以顺利拷贝到fat32文件系统
  3. ✅ 合并过程无损,可完全还原原始文件
  4. ✅ 配合md5sum验证可确保数据完整性

这个技巧不仅适用于iso镜像,对于数据库备份、日志归档、视频文件等任何大文件传输场景都非常实用。下次遇到fat32的4gb限制时,相信你已经有了完美的解决方案!

以上就是linux下实现大文件切割与合并实战的详细内容,更多关于linux大文件切割与合并的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com