求可在Linux/Windows随机生成数百万目录及文件的工具或脚本
跨平台生成大量随机文件/目录的工具与脚本
Linux 实现方案
1. Shell 脚本
通过bash结合系统工具快速生成层级结构,适合非跨平台场景:
#!/bin/bash # 生成带随机层级的目录与文件 ROOT_DIR="./large_fs" mkdir -p "$ROOT_DIR" # 生成10000个目录节点,每个节点包含2-3层子目录 for i in {1..10000}; do # 随机生成2-3层子目录路径 DIR_LEVELS=$((RANDOM % 2 + 2)) CURRENT_DIR="$ROOT_DIR" for ((j=0; j<DIR_LEVELS; j++)); do CURRENT_DIR="$CURRENT_DIR/$(openssl rand -hex 4)" mkdir -p "$CURRENT_DIR" done # 在每个底层目录生成3-5个随机文件(可选写入内容) for ((k=0; k<$((RANDOM % 3 + 3)); k++)); do FILE_NAME=$(openssl rand -hex 3) # 创建空文件或写入随机内容 touch "$CURRENT_DIR/$FILE_NAME" # 若需生成带内容的文件,可替换为:dd if=/dev/urandom of="$CURRENT_DIR/$FILE_NAME" bs=1K count=1 >/dev/null 2>&1 done done
调整循环次数和层级数可控制总文件/目录数量,数百万级需注意磁盘IO和内存占用。
2. 跨平台通用Python脚本
Python脚本可同时在Linux和Windows运行,灵活性更高:
import os import random import string def get_random_str(length=8): """生成指定长度的随机字符串""" return ''.join(random.choices(string.ascii_letters + string.digits, k=length)) def generate_file_system(root_path, total_dir_nodes, files_per_node): """生成指定数量的目录节点和文件""" os.makedirs(root_path, exist_ok=True) for _ in range(total_dir_nodes): # 随机生成2-3层子目录 current_path = root_path for _ in range(random.randint(2, 3)): current_path = os.path.join(current_path, get_random_str()) os.makedirs(current_path, exist_ok=True) # 在当前目录生成随机文件 for _ in range(files_per_node): file_path = os.path.join(current_path, get_random_str()) with open(file_path, 'w', encoding='utf-8') as f: # 写入100字节随机内容,或注释此行创建空文件 f.write(get_random_str(100)) # 调用示例:生成10000个目录节点,每个节点下3个文件,总计约30000个文件+30000个目录 generate_file_system("./cross_platform_fs", 10000, 3)
Windows 实现方案
1. PowerShell 脚本
PowerShell原生支持复杂的随机结构生成,适合Windows环境:
$rootDir = ".\windows_large_fs" New-Item -ItemType Directory -Path $rootDir -Force | Out-Null # 生成10000个目录节点 for ($i=1; $i -le 10000; $i++) { # 随机生成3层子目录 $dirLayers = @( (-join ((65..90) + (97..122) | Get-Random -Count 8 | ForEach-Object {[char]$_})), (-join ((65..90) + (97..122) | Get-Random -Count 8 | ForEach-Object {[char]$_})), (-join ((65..90) + (97..122) | Get-Random -Count 8 | ForEach-Object {[char]$_})) ) $fullDirPath = Join-Path -Path $rootDir -ChildPath ($dirLayers -join "\") New-Item -ItemType Directory -Path $fullDirPath -Force | Out-Null # 在每个目录下生成4个随机文件 for ($j=1; $j -le 4; $j++) { $fileName = -join ((65..90) + (97..122) | Get-Random -Count 6 | ForEach-Object {[char]$_}) $filePath = Join-Path -Path $fullDirPath -ChildPath $fileName # 写入200字符随机内容,或用"New-Item -ItemType File -Path $filePath"创建空文件 -join ((65..90) + (97..122) | Get-Random -Count 200 | ForEach-Object {[char]$_}) | Out-File -Path $filePath -Encoding ASCII } }
2. 批处理脚本(简单场景)
适合快速生成小规模随机结构,随机字符串依赖%random%变量:
@echo off setlocal enabledelayedexpansion set "rootDir=batch_test_fs" md !rootDir! 2>nul # 生成1000个目录节点,每个节点包含2层子目录 for /l %%i in (1,1,1000) do ( set "dir1=dir_!random!!random!" set "dir2=dir_!random!!random!" md "!rootDir!\!dir1!\!dir2!" 2>nul # 每个目录下生成5个空文件 for /l %%j in (1,1,5) do ( set "file=file_!random!!random!" type nul > "!rootDir!\!dir1!\!dir2!\!file!" ) ) endlocal
批处理的随机字符多样性有限,数百万级场景建议使用PowerShell或Python脚本。
内容的提问来源于stack exchange,提问作者Susanta Dutta
相关产品推荐
相关产品推荐

