如何在BASH中批量调用dd命令生成指定名称和大小的txt文件
批量生成指定大小txt文件的实现方案
原有脚本问题说明
- 遍历文件名和遍历大小是两个独立的循环,没有建立文件名和对应大小的映射关系,无法实现匹配生成
- dd命令放在循环外部,只会执行一次,且无法获取循环内的文件名、大小变量
- 使用
ls解析文件属性的方式不稳定,容易因文件名含空格等特殊字符出错 /dev/random在生成大文件时可能因为熵池不足出现阻塞,建议替换为/dev/urandom
实现方案
方案1:基于配置表匹配生成(推荐,适合文件名和大小无固定规律的场景)
首先提前准备配置文件file_size_config.txt,每行按文件名 目标大小的格式填写,支持k/m/g等dd可识别的单位,示例内容:
1.txt 1k
2.txt 3m
three.txt 55k
然后执行以下脚本即可批量生成:
#!/bin/bash # 遍历配置表逐一生成文件 while IFS=' ' read -r filename target_size do # 跳过空行和注释行 [[ -z "$filename" || "$filename" == \#* ]] && continue # 调用dd生成指定大小的文件 dd if=/dev/urandom of="$filename" bs="$target_size" count=1 status=progress echo "已生成文件:$filename,大小:$target_size" done < file_size_config.txt
如果不需要随机内容,只需要指定大小的空文件,可以替换dd命令为更快的fallocate -l "$target_size" "$filename",生成效率更高。
方案2:固定命名规则自动生成(适合文件名按序号递增、大小有固定规则的场景)
比如要生成1000个文件,命名为1.txt到1000.txt,大小分别为1k、2k...1000k,脚本如下:
#!/bin/bash for i in {1..1000} do target_size="${i}k" filename="${i}.txt" dd if=/dev/urandom of="$filename" bs="$target_size" count=1 status=progress done
注意事项
- 脚本执行前确认目标文件夹权限,避免写入失败
- 如果需要生成纯文本内容而非随机二进制,可以将
if=/dev/urandom替换为if=<(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 100),生成可阅读的随机文本内容 status=progress参数可以实时显示dd的执行进度,不需要可以删除
内容的提问来源于stack exchange,提问作者Kirill Odin
相关产品推荐
相关产品推荐

