在日常工作中,我们经常会遇到需要传输超过4GB的大文件(如ISO镜像、数据库备份、日志文件等)到FAT32文件系统的存储设备(如U盘、移动硬盘)上,但由于FAT32文件系统本身的设计限制,单个文件最大只能支持4GB,这导致大文件无法直接拷贝。
本文将详细介绍如何使用Linux系统自带的split和cat命令,轻松实现大文件的切割与合并,彻底告别FAT32的文件大小限制。
一、背景与痛点
1.1 为什么需要切割文件?
FAT32文件系统有一个众所周知的限制:单个文件大小不能超过4GB。这意味着:
- 你下载的Linux发行版ISO镜像(通常4-8GB)无法直接拷贝到FAT32格式的U盘
- 数据库备份文件(可能几十GB)无法通过FAT32移动硬盘转移
- 大型视频文件或软件安装包需要拆分后才能存储
1.2 解决方案
使用Linux系统自带的split命令将大文件切割成多个小于4GB的小文件,传输到目标机器后,再用cat命令合并还原。整个过程无损、快速、简单。
二、split命令详解
2.1 基本语法
bash
split [选项] [输入文件] [输出前缀]
2.2 常用选项
| 选项 | 说明 |
|---|---|
-b SIZE |
按指定大小切割,单位支持k、m、g(如 -b 450m) |
-d |
使用数字后缀(如 00、01),而不是默认的字母后缀 |
-a N |
指定后缀长度为N(默认2),如 -a 3 生成 000、001 |
-l NUMBER |
按行数切割(适合文本文件) |
2.3 切割示例对比
bash
# 方式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 切割操作
方案一:直接切割(本次实战采用)
bash
# 将ISO切割成450MB大小的多个文件
split -b 450m -d Kylin-Server-10-SP1-Release-Build20-20210518-arm64.iso Kylin-Server-10-SP1-Release-Build20-20210518-arm64.iso.
执行效果:
bash
$ 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
方案二:边压缩边切割(节省空间)
bash
# 先压缩再切割,适合对压缩率敏感的场景
tar -zcf - /home/package/Kylin-Server-10-SP1-Release-Build20-20210518-arm64.iso | split -b 450M -d - Kylin-Server-10-SP1.tar.gz.
方案三:macOS系统示例
bash
# 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盘或移动硬盘:
bash
# 复制所有切割文件到目标存储设备
cp Kylin-Server-10-SP1-Release-Build20-20210518-arm64.iso.* /media/usb/
💡 提示:每个小文件都小于450MB,完全可以正常写入FAT32文件系统。
3.3 合并还原
在目标服务器上,将所有切割片段合并成完整文件。
方式一:直接合并(对应直接切割方式)
bash
# 合并所有片段,还原完整文件
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
方式二:合并并解压(对应边切割边压缩方式)
bash
# 合并并解压一步完成
cat Kylin-Server-10-SP1.tar.gz.* | tar -zxv
3.4 验证合并结果
bash
# 查看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 指定切割文件大小单位
bash
# 按字节(默认)
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 自定义后缀长度
bash
# 生成3位数字后缀(000、001、002...)
split -b 450m -d -a 3 largefile.iso largefile.iso.
# 输出结果:largefile.iso.000、largefile.iso.001...
4.3 按行数切割文本文件
bash
# 将日志文件按10万行切割
split -l 100000 app.log app.log.part_
4.4 带进度条的合并(使用pv工具)
bash
# 安装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不一致
原因:
- 传输过程中部分片段损坏
- 切割时使用了不同的切割大小
解决:
bash
# 合并后重新计算MD5并与原文件比对
md5sum original.iso
md5sum restored.iso
# 如不一致,重新传输损坏的片段并合并
5.3 磁盘空间不足
注意:切割和合并过程需要额外的磁盘空间:
- 切割:需要原文件大小 + 切割后文件大小
- 合并:需要所有片段大小 + 合并后文件大小
建议在操作前确保有至少2倍于原文件的可用空间。
5.4 Windows系统如何处理?
如果目标机器是Windows系统:
- 使用Git Bash :内置了
cat命令,可用同样方式合并 - 使用第三方工具:如7-Zip支持合并split分割的文件
- 使用PowerShell:
powershell
# PowerShell合并文件
Get-Content Kylin-Server-10-SP1.iso.* -AsByteStream | Set-Content Kylin-Server-10-SP1.iso -AsByteStream
六、自动化脚本示例
6.1 一键切割脚本
bash
#!/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 一键合并脚本
bash
#!/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` |
核心要点:
- ✅
split+cat是Linux内置命令,无需安装额外软件 - ✅ 切割后的小文件可以顺利拷贝到FAT32文件系统
- ✅ 合并过程无损,可完全还原原始文件
- ✅ 配合
md5sum验证可确保数据完整性
这个技巧不仅适用于ISO镜像,对于数据库备份、日志归档、视频文件等任何大文件传输场景都非常实用。下次遇到FAT32的4GB限制时,相信你已经有了完美的解决方案!
📌 互动环节:你在工作中遇到过哪些大文件传输的坑?欢迎在评论区分享你的经验或遇到的问题,我们一起讨论解决方案!