Linux下實(shí)現(xiàn)大文件切割與合并實(shí)戰(zhàn)
在日常工作中,我們經(jīng)常會(huì)遇到需要傳輸超過4GB的大文件(如ISO鏡像、數(shù)據(jù)庫備份、日志文件等)到FAT32文件系統(tǒng)的存儲(chǔ)設(shè)備(如U盤、移動(dòng)硬盤)上,但由于FAT32文件系統(tǒng)本身的設(shè)計(jì)限制,單個(gè)文件最大只能支持4GB,這導(dǎo)致大文件無法直接拷貝。
本文將詳細(xì)介紹如何使用Linux系統(tǒng)自帶的split和cat命令,輕松實(shí)現(xiàn)大文件的切割與合并,徹底告別FAT32的文件大小限制。
一、背景與痛點(diǎn)
1.1 為什么需要切割文件?
FAT32文件系統(tǒng)有一個(gè)眾所周知的限制:單個(gè)文件大小不能超過4GB。這意味著:
- 你下載的Linux發(fā)行版ISO鏡像(通常4-8GB)無法直接拷貝到FAT32格式的U盤
- 數(shù)據(jù)庫備份文件(可能幾十GB)無法通過FAT32移動(dòng)硬盤轉(zhuǎn)移
- 大型視頻文件或軟件安裝包需要拆分后才能存儲(chǔ)
1.2 解決方案
使用Linux系統(tǒng)自帶的split命令將大文件切割成多個(gè)小于4GB的小文件,傳輸?shù)侥繕?biāo)機(jī)器后,再用cat命令合并還原。整個(gè)過程無損、快速、簡單。
二、split命令詳解
2.1 基本語法
split [選項(xiàng)] [輸入文件] [輸出前綴]
2.2 常用選項(xiàng)
| 選項(xiàng) | 說明 |
|---|---|
-b SIZE | 按指定大小切割,單位支持k、m、g(如 -b 450m) |
-d | 使用數(shù)字后綴(如 00、01),而不是默認(rèn)的字母后綴 |
-a N | 指定后綴長度為N(默認(rèn)2),如 -a 3 生成 000、001 |
-l NUMBER | 按行數(shù)切割(適合文本文件) |
2.3 切割示例對(duì)比
# 方式1:切割后壓縮(邊壓縮邊切割) tar -zcf - /path/to/largefile.iso | split -b 450M -d - output.tar.gz. # 方式2:直接切割原始文件(推薦,簡單直接) split -b 450m -d largefile.iso largefile.iso.
三、實(shí)戰(zhàn)場景:切割與合并ISO鏡像
假設(shè)我們有一個(gè)大小為6.5GB的麒麟操作系統(tǒng)ISO文件:
Kylin-Server-10-SP1-Release-Build20-20210518-arm64.iso
3.1 切割操作
方案一:直接切割(本次實(shí)戰(zhàn)采用)
# 將ISO切割成450MB大小的多個(gè)文件 split -b 450m -d Kylin-Server-10-SP1-Release-Build20-20210518-arm64.iso Kylin-Server-10-SP1-Release-Build20-20210518-arm64.iso.
執(zhí)行效果:
$ 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
方案二:邊壓縮邊切割(節(jié)省空間)
# 先壓縮再切割,適合對(duì)壓縮率敏感的場景 tar -zcf - /home/package/Kylin-Server-10-SP1-Release-Build20-20210518-arm64.iso | split -b 450M -d - Kylin-Server-10-SP1.tar.gz.
方案三:macOS系統(tǒng)示例
# macOS下切割CentOS ISO為3GB大小的文件 split -b 3000m CentOS-7-x86_64-DVD-2009.iso CentOS-7-x86_64-DVD-2009.iso.
3.2 上傳切割文件
將切割生成的多個(gè)小文件拷貝到FAT32格式的U盤或移動(dòng)硬盤:
# 復(fù)制所有切割文件到目標(biāo)存儲(chǔ)設(shè)備 cp Kylin-Server-10-SP1-Release-Build20-20210518-arm64.iso.* /media/usb/
提示:每個(gè)小文件都小于450MB,完全可以正常寫入FAT32文件系統(tǒng)。
3.3 合并還原
在目標(biāo)服務(wù)器上,將所有切割片段合并成完整文件。
方式一:直接合并(對(duì)應(yīng)直接切割方式)
# 合并所有片段,還原完整文件 cat Kylin-Server-10-SP1-Release-Build20-20210518-arm64.iso.* > Kylin-Server-10-SP1-Release-Build20-20210518-arm64.iso # 驗(yàn)證MD5(可選,確保文件完整性) md5sum Kylin-Server-10-SP1-Release-Build20-20210518-arm64.iso
方式二:合并并解壓(對(duì)應(yīng)邊切割邊壓縮方式)
# 合并并解壓一步完成 cat Kylin-Server-10-SP1.tar.gz.* | tar -zxv
3.4 驗(yàn)證合并結(jié)果
# 查看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 # 嘗試掛載驗(yàn)證(Linux) mount -o loop Kylin-Server-10-SP1-Release-Build20-20210518-arm64.iso /mnt/iso ls /mnt/iso
四、高級(jí)用法與技巧
4.1 指定切割文件大小單位
# 按字節(jié)(默認(rèn)) 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位數(shù)字后綴(000、001、002...) split -b 450m -d -a 3 largefile.iso largefile.iso. # 輸出結(jié)果:largefile.iso.000、largefile.iso.001...
4.3 按行數(shù)切割文本文件
# 將日志文件按10萬行切割 split -l 100000 app.log app.log.part_
4.4 帶進(jìn)度條的合并(使用pv工具)
# 安裝pv(pipe viewer)工具 yum install pv -y # CentOS/RHEL apt install pv -y # Ubuntu/Debian # 帶進(jìn)度條的合并 pv Kylin-Server-10-SP1-Release-Build20-20210518-arm64.iso.* > Kylin-Server-10-SP1-Release-Build20-20210518-arm64.iso
五、常見問題與注意事項(xiàng)
5.1 切割后文件無法合并
原因:切割命令和合并命令方式不匹配(如壓縮切割和直接切割混用)
解決:保持一致的處理方式
- 直接切割 → 直接合并
- 壓縮切割 → 解壓合并
5.2 合并后文件MD5不一致
原因:
- 傳輸過程中部分片段損壞
- 切割時(shí)使用了不同的切割大小
解決:
# 合并后重新計(jì)算MD5并與原文件比對(duì) md5sum original.iso md5sum restored.iso # 如不一致,重新傳輸損壞的片段并合并
5.3 磁盤空間不足
注意:切割和合并過程需要額外的磁盤空間:
- 切割:需要原文件大小 + 切割后文件大小
- 合并:需要所有片段大小 + 合并后文件大小
建議在操作前確保有至少2倍于原文件的可用空間。
5.4 Windows系統(tǒng)如何處理?
如果目標(biāo)機(jī)器是Windows系統(tǒng):
- 使用Git Bash:內(nèi)置了
cat命令,可用同樣方式合并 - 使用第三方工具:如7-Zip支持合并split分割的文件
- 使用PowerShell:
# PowerShell合并文件 Get-Content Kylin-Server-10-SP1.iso.* -AsByteStream | Set-Content Kylin-Server-10-SP1.iso -AsByteStream
六、自動(dòng)化腳本示例
6.1 一鍵切割腳本
#!/bin/bash
# split_file.sh - 大文件切割腳本
FILE=$1
SIZE=${2:-450m} # 默認(rèn)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
七、總結(jié)
通過本文的實(shí)戰(zhàn)演示,我們掌握了:
| 操作 | 命令 | 適用場景 |
|---|---|---|
| 切割 | split -b 450m -d file.iso file.iso. | 標(biāo)準(zhǔn)切割,簡單可靠 |
| 壓縮切割 | tar -zcf - file.iso | split -b 450m -d - out.tar.gz. | 節(jié)省存儲(chǔ)空間 |
| 合并 | cat file.iso.* > file.iso | 還原原始文件 |
| 合并解壓 | cat out.tar.gz.* | tar -zxv | 合并并解壓一步完成 |
核心要點(diǎn):
- ?
split+cat是Linux內(nèi)置命令,無需安裝額外軟件 - ? 切割后的小文件可以順利拷貝到FAT32文件系統(tǒng)
- ? 合并過程無損,可完全還原原始文件
- ? 配合
md5sum驗(yàn)證可確保數(shù)據(jù)完整性
這個(gè)技巧不僅適用于ISO鏡像,對(duì)于數(shù)據(jù)庫備份、日志歸檔、視頻文件等任何大文件傳輸場景都非常實(shí)用。下次遇到FAT32的4GB限制時(shí),相信你已經(jīng)有了完美的解決方案!
以上就是Linux下實(shí)現(xiàn)大文件切割與合并實(shí)戰(zhàn)的詳細(xì)內(nèi)容,更多關(guān)于Linux大文件切割與合并的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
linux下用tar命令將當(dāng)前目錄下文件按子目錄壓縮歸檔的實(shí)現(xiàn)
下面小編就為大家?guī)硪黄猯inux下用tar命令將當(dāng)前目錄下文件按子目錄壓縮歸檔的實(shí)現(xiàn)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-12-12
Linux中crontab定時(shí)任務(wù)不執(zhí)行的原因
本篇文章主要介紹了Linux中crontab定時(shí)任務(wù)不執(zhí)行的原因,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-03-03
Linux系統(tǒng)配置網(wǎng)絡(luò)詳細(xì)介紹
大家好,本篇文章主要講的是Linux系統(tǒng)配置網(wǎng)絡(luò)詳細(xì)介紹,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2022-01-01
雙系統(tǒng)電腦中把Ubuntu裝進(jìn)外接移動(dòng)固態(tài)硬盤的全過程
這篇文章主要介紹了如何在Windows?11系統(tǒng)中使用VMware?17創(chuàng)建虛擬機(jī),并在虛擬機(jī)中安裝Ubuntu?22.04桌面版或Ubuntu?20.04,文章還列舉了一些常見的安裝錯(cuò)誤及其解決方法,需要的朋友可以參考下2025-05-05
Apache Flink 任意 JAR 包上傳漏洞利用及防范策略分析
這篇文章主要介紹了Apache Flink 任意 JAR 包上傳漏洞利用及防范策略, 本文提供的案例和方法僅用于教學(xué)目的,實(shí)際操作時(shí)應(yīng)確保遵守相關(guān)法律法規(guī),不應(yīng)用于非法侵入或攻擊他人系統(tǒng),需要的朋友可以參考下2024-07-07

