如何将一亿文本文件高效生成技巧一网打尽?
- 内容介绍
- 文章标签
- 相关推荐
一、痛点速览:为什么“一亿文这篇文章件”让你抓狂?
🔴 生成速度慢,单线程几天甚至几周才能完成。
🔴 磁盘 I/O 成为瓶颈,硬盘满载导致程序卡死。
🔴 目录结构混乱。数十万/数百万文件堆在同一文件夹,导致查找和管理成本爆炸。
🔴 脚本不够健壮。错误一次就全盘崩溃,缺少日志与容错。
🔴 单机资源受限,面对更大规模文件时无计可施。
二、整体思路:从“手动敲脚本”到“高效并行+分布式”
- ① 先划分任务:把 100 000 000 个文件切成若干块,每块负责一定数量的写入。
- ② 合理目录层级:避免把所有文件放在根目录,采用多级子目录提高 FS 效率。其实,
- ③ 选对硬件:SSD> NVMe> HDD;文件程序优先 ext4或 NTFS。
- ④ 并发写入:多线程 / 多进程 / 线程池 / async,实现 CPU 与 I/O 的最大利用率。
- ⑤ 必要时走分布式:使用 Spark、Flink 或自研任务调度,让多台机器共同完成生成。
三、命令行工具快速上手
1️⃣ Windows 批处理脚本
@echo off
:: 设置目标目录
set "OUTDIR=C:\data\files"
if not exist "%OUTDIR%" mkdir "%OUTDIR%"
:: 每个子目录存放 10k 文件
set "BATCH=10000"
set /a "DIR_COUNT=10000" :: 10000 * 10000 = 1e8
for /L %%d in do (
set "SUBDIR=%OUTDIR%\%%d"
if not exist "!SUBDIR," mkdir "!SUBDIR,"
for /L %%i in do (
set /a "IDX=%%d*%BATCH%+%%i"
echo This is file #!IDX,> "!
SUBDIR,\file!IDX,.txt"
if!IDX,neq 0 if!IDX,按理说,%% 1000000 == 0 echo 已生成!IDX,个文件...
)
)
echo 所有文件生成完毕!
2️⃣ Linux Bash 脚本
#!/bin/bash
OUTDIR="/data/files"
mkdir -p "$OUTDIR"
BATCH=10000 # 每个子目录的文件数
DIR_COUNT=10000 # 子目录数量
for d in $));do
SUBDIR="$OUTDIR/$d"
mkdir -p "$SUBDIR"
for i in $;do
IDX=$)
echo "This is file #$IDX"> "$SUBDIR/file${IDX}.txt"
) && echo "已生成 $IDX 个文件..."
done
done
echo "All $) files created."
四、Python 脚本——灵活且易于 的方案
1️⃣ 基础多线程实现
2️⃣ 使用异步 I/O进一步压榨磁盘吞吐量
标签:一亿一、痛点速览:为什么“一亿文这篇文章件”让你抓狂?
🔴 生成速度慢,单线程几天甚至几周才能完成。
🔴 磁盘 I/O 成为瓶颈,硬盘满载导致程序卡死。
🔴 目录结构混乱。数十万/数百万文件堆在同一文件夹,导致查找和管理成本爆炸。
🔴 脚本不够健壮。错误一次就全盘崩溃,缺少日志与容错。
🔴 单机资源受限,面对更大规模文件时无计可施。
二、整体思路:从“手动敲脚本”到“高效并行+分布式”
- ① 先划分任务:把 100 000 000 个文件切成若干块,每块负责一定数量的写入。
- ② 合理目录层级:避免把所有文件放在根目录,采用多级子目录提高 FS 效率。其实,
- ③ 选对硬件:SSD> NVMe> HDD;文件程序优先 ext4或 NTFS。
- ④ 并发写入:多线程 / 多进程 / 线程池 / async,实现 CPU 与 I/O 的最大利用率。
- ⑤ 必要时走分布式:使用 Spark、Flink 或自研任务调度,让多台机器共同完成生成。
三、命令行工具快速上手
1️⃣ Windows 批处理脚本
@echo off
:: 设置目标目录
set "OUTDIR=C:\data\files"
if not exist "%OUTDIR%" mkdir "%OUTDIR%"
:: 每个子目录存放 10k 文件
set "BATCH=10000"
set /a "DIR_COUNT=10000" :: 10000 * 10000 = 1e8
for /L %%d in do (
set "SUBDIR=%OUTDIR%\%%d"
if not exist "!SUBDIR," mkdir "!SUBDIR,"
for /L %%i in do (
set /a "IDX=%%d*%BATCH%+%%i"
echo This is file #!IDX,> "!
SUBDIR,\file!IDX,.txt"
if!IDX,neq 0 if!IDX,按理说,%% 1000000 == 0 echo 已生成!IDX,个文件...
)
)
echo 所有文件生成完毕!
2️⃣ Linux Bash 脚本
#!/bin/bash
OUTDIR="/data/files"
mkdir -p "$OUTDIR"
BATCH=10000 # 每个子目录的文件数
DIR_COUNT=10000 # 子目录数量
for d in $));do
SUBDIR="$OUTDIR/$d"
mkdir -p "$SUBDIR"
for i in $;do
IDX=$)
echo "This is file #$IDX"> "$SUBDIR/file${IDX}.txt"
) && echo "已生成 $IDX 个文件..."
done
done
echo "All $) files created."
四、Python 脚本——灵活且易于 的方案
1️⃣ 基础多线程实现
2️⃣ 使用异步 I/O进一步压榨磁盘吞吐量

