0

0

如何分割Linux大文件传输 split文件切割与合并

P粉602998670

P粉602998670

发布时间:2025-09-02 09:07:01

|

922人浏览过

|

来源于php中文网

原创

使用split命令将大文件按指定大小分割成多个小文件,便于传输;2. 传输分割后的文件及校验和文件到目标机器;3. 使用cat命令按正确顺序合并文件;4. 通过md5sum等校验工具验证合并后文件的完整性,确保数据无损。该方法有效规避文件系统限制、网络不稳定等问题,提升大文件传输的可靠性与效率。

如何分割Linux大文件传输 split文件切割与合并

处理Linux上的大文件传输,特别是当文件大小超出文件系统限制、网络稳定性堪忧或传输工具不给力时,确实是个令人头疼的问题。解决方案其实很直接:使用

split
命令将大文件分割成若干小块,传输完成后再用
cat
命令将它们合并起来。这不仅能规避许多潜在的传输风险,也能让整个过程变得可控和安心。

解决方案

分割大文件主要依靠

split
命令。它的核心思想是把一个输入文件拆分成多个输出文件,每个输出文件的大小或行数可以自定义。

最常用的方式是按大小分割:

split -b 1G large_archive.tar.gz archive_part_

这条命令会将

large_archive.tar.gz
文件分割成多个1GB大小的文件。
archive_part_
是分割后文件的前缀,例如会生成
archive_part_aa
,
archive_part_ab
,
archive_part_ac
等。

如果你想让分割后的文件名带有数字后缀,可以使用

-d
参数,并配合
-a
指定后缀的长度:

split -b 500M -d -a 3 my_big_data.sql data_part_

这会生成

data_part_000
,
data_part_001
,
data_part_002
等,每个文件500MB。选择多大的块,通常取决于你的网络带宽、接收方的存储能力以及你对传输中断的容忍度。我个人习惯是1GB或者500MB,感觉这个大小在大多数网络环境下都比较稳妥。

分割完成后,传输这些小文件就容易多了,无论是通过SCP、FTP还是其他方式。

当所有分割文件都传输到目标机器后,合并它们就简单了,使用

cat
命令:

cat archive_part_* > large_archive.tar.gz

这里的关键是

archive_part_*
,它会按照字母顺序(或数字顺序,如果你用了
-d
)将所有匹配的文件连接起来,然后重定向到一个新的文件
large_archive.tar.gz
。顺序千万不能错,不然合并出来的文件就是损坏的。
split
命令默认的命名方式(
aa
,
ab
00
,
01
)正好确保了
cat *
能够正确地按序合并。

为什么我们需要分割大文件?

有时候,你可能会觉得直接传输一个大文件不是更省事吗?但现实往往没那么理想。我个人就遇到过好几次,眼看着一个几十GB的文件通过网络传到99%突然断了,那种挫败感真是难以言喻。分割文件能规避很多这类问题,主要有以下几个原因:

  • 文件系统限制: 某些旧的文件系统,比如FAT32,对单个文件的大小有限制(通常是4GB)。如果你需要把一个超过4GB的文件拷贝到这种格式的U盘或移动硬盘上,不分割根本就放不进去。
  • 网络传输稳定性: 大文件传输时间长,网络波动、瞬时断线、服务器过载等任何一个环节出问题,都可能导致整个传输失败。分割成小文件后,即使某个小文件传输失败,也只需要重传那一部分,而不是从头再来,心理负担都小很多。
  • 传输工具兼容性: 某些SCP、FTP客户端或Web上传界面在处理超大文件时可能会出现内存溢出、连接超时或效率低下的问题。分割后,每个文件都在工具的舒适区内,传输会更顺畅。
  • 存储与处理便利性: 接收方可能没有足够的连续磁盘空间一次性接收一个超大文件,或者他们需要分批处理这些数据。分割后,接收方可以边接收边处理,或者选择性地下载部分数据。
  • 带宽效率: 虽然
    split
    本身不提供并行传输,但分割后你可以手动或通过脚本同时传输多个小块,在某些情况下可以提高整体传输效率。

如何确保文件分割与合并的完整性?

仅仅分割和合并是不够的,你还需要确保合并后的文件和原始文件是完全一致的,没有在传输或合并过程中损坏。这是数据完整性的核心,也是我每次操作大文件都必不可少的一步。

最可靠的方法是使用校验和(Checksums)。Linux提供了

md5sum
sha1sum
sha256sum
等工具来生成文件的数字指纹。

LongShot
LongShot

LongShot 是一款 AI 写作助手,可帮助您生成针对搜索引擎优化的内容博客。

下载

基本流程是这样的:

  1. 在源机器上,分割文件前,计算原始文件的校验和:
    md5sum original_large_file.iso > original_large_file.iso.md5

    这会生成一个

    .md5
    文件,里面包含了原始文件的MD5值。这个MD5文件很小,可以和分割后的文件一起传输过去。

  2. 传输所有分割后的文件和校验和文件到目标机器。
  3. 在目标机器上,合并所有文件:
    cat part_aa part_ab part_ac > merged_large_file.iso

    确保合并后的文件名和原始文件名一致(或者你方便记忆)。

  4. 计算合并后文件的校验和,并与原始校验和进行比对:
    md5sum -c original_large_file.iso.md5

    如果输出显示

    original_large_file.iso: OK
    ,那么恭喜你,文件完整无损。如果显示
    MISMATCH
    ,那就说明文件在传输或合并过程中出了问题,需要重新检查或传输。

除了校验和,你也可以进行一个初步的检查:比较原始文件和合并后文件的大小。虽然文件大小一致不代表内容一定正确,但如果大小不一致,那肯定就是出错了。

ls -lh
命令可以方便地查看文件大小。

我个人通常会先用

md5sum
生成个校验文件,传过去之后再跑一次比对。如果对不上,那肯定哪里出了问题,可能网络不稳定导致某个小块损坏,也可能是合并命令哪里写错了。这种主动的检查比事后发现文件损坏要省心多了,毕竟谁也不想等到用的时候才发现文件打不开。

自动化分割与合并的脚本实践

手动执行

split
cat
命令,尤其是在文件多或者需要频繁操作时,效率并不高,而且容易出错。这时候,编写简单的Shell脚本就能大大提升效率和可靠性。写脚本的好处是,下次再遇到类似情况,直接跑一下就行,不用记那些复杂的参数,而且还能把校验过程也集成进去,省心。

一个简单的分割脚本示例:

#!/bin/bash
# file_splitter.sh
# 用法: ./file_splitter.sh <输入文件> <分块大小MB> [输出文件前缀]

# 检查参数数量
if [ "$#" -lt 2 ]; then
    echo "用法: $0 <输入文件> <分块大小MB> [输出文件前缀]"
    echo "示例: $0 my_big_video.mp4 1024 video_part_"
    exit 1
fi

INPUT_FILE="$1"
CHUNK_SIZE_MB="$2"
# 如果没有提供前缀,就使用输入文件名(去除扩展名)作为默认前缀
OUTPUT_PREFIX="${3:-$(basename "$INPUT_FILE" .${INPUT_FILE##*.})}.part"

# 检查输入文件是否存在
if [ ! -f "$INPUT_FILE" ]; then
    echo "错误: 输入文件 '$INPUT_FILE' 未找到。"
    exit 1
fi

echo "正在分割 '$INPUT_FILE' 为 ${CHUNK_SIZE_MB}MB 的块..."
# 使用-d -a 3确保数字后缀,方便排序和识别
split -b "${CHUNK_SIZE_MB}M" -d -a 3 "$INPUT_FILE" "$OUTPUT_PREFIX"

echo "正在为原始文件生成MD5校验和..."
md5sum "$INPUT_FILE" > "${INPUT_FILE}.md5"

echo "分割完成。文件块前缀为 '$OUTPUT_PREFIX'。"
echo "MD5校验和已保存到 '${INPUT_FILE}.md5'。"

这个脚本自动化了分割过程,并自动生成MD5校验和文件。

一个简单的合并脚本示例:

#!/bin/bash
# file_merger.sh
# 用法: ./file_merger.sh <输出文件> <分块文件前缀> [MD5校验和文件]

# 检查参数数量
if [ "$#" -lt 2 ]; then
    echo "用法: $0 <输出文件> <分块文件前缀> [MD5校验和文件]"
    echo "示例: $0 my_big_video.mp4 video_part_ my_big_video.mp4.md5"
    exit 1
fi

OUTPUT_FILE="$1"
PARTS_PREFIX="$2"
MD5_CHECKSUM_FILE="$3"

echo "正在合并前缀为 '$PARTS_PREFIX' 的文件块到 '$OUTPUT_FILE'..."
# 使用排序后的通配符确保正确顺序
cat "${PARTS_PREFIX}"* > "$OUTPUT_FILE"

echo "正在验证文件完整性..."
if [ -f "$MD5_CHECKSUM_FILE" ]; then
    if md5sum -c "$MD5_CHECKSUM_FILE" --status; then
        echo "MD5校验和匹配。文件完整性已验证。"
    else
        echo "MD5校验和不匹配!文件可能已损坏。"
    fi
else
    echo "未提供或未找到MD5校验和文件。跳过完整性检查。"
fi

echo "合并完成。"

这个合并脚本不仅将文件合并,还尝试使用提供的MD5校验和文件进行完整性验证。

使用这些脚本,你只需要提供几个简单的参数,剩下的工作就交给系统去完成。这不仅减少了手动输入命令的错误,也让整个大文件传输和处理流程变得更加专业和高效。尤其是在需要定期处理大文件备份或同步的场景下,这些小脚本能省去不少麻烦。

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1345

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

700

2023.06.29

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

294

2023.06.30

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

773

2023.07.05

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

571

2023.07.06

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

544

2023.07.20

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

296

2023.07.20

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

374

2023.07.25

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

74

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 6.4万人学习

Git 教程
Git 教程

共21课时 | 2.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号