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

处理Linux上的大文件传输,特别是当文件大小超出文件系统限制、网络稳定性堪忧或传输工具不给力时,确实是个令人头疼的问题。解决方案其实很直接:使用
split
cat
分割大文件主要依靠
split
最常用的方式是按大小分割:
split -b 1G large_archive.tar.gz archive_part_
这条命令会将
large_archive.tar.gz
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
分割完成后,传输这些小文件就容易多了,无论是通过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%突然断了,那种挫败感真是难以言喻。分割文件能规避很多这类问题,主要有以下几个原因:
split
仅仅分割和合并是不够的,你还需要确保合并后的文件和原始文件是完全一致的,没有在传输或合并过程中损坏。这是数据完整性的核心,也是我每次操作大文件都必不可少的一步。
最可靠的方法是使用校验和(Checksums)。Linux提供了
md5sum
sha1sum
sha256sum
基本流程是这样的:
md5sum original_large_file.iso > original_large_file.iso.md5
这会生成一个
.md5
cat part_aa part_ab part_ac > merged_large_file.iso
确保合并后的文件名和原始文件名一致(或者你方便记忆)。
md5sum -c original_large_file.iso.md5
如果输出显示
original_large_file.iso: OK
MISMATCH
除了校验和,你也可以进行一个初步的检查:比较原始文件和合并后文件的大小。虽然文件大小一致不代表内容一定正确,但如果大小不一致,那肯定就是出错了。
ls -lh
我个人通常会先用
md5sum
手动执行
split
cat
一个简单的分割脚本示例:
#!/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校验和文件进行完整性验证。
使用这些脚本,你只需要提供几个简单的参数,剩下的工作就交给系统去完成。这不仅减少了手动输入命令的错误,也让整个大文件传输和处理流程变得更加专业和高效。尤其是在需要定期处理大文件备份或同步的场景下,这些小脚本能省去不少麻烦。
以上就是如何分割Linux大文件传输 split文件切割与合并的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号