命令之美|如何创建一个 100M 的大文件?

目录

第一种:dd 命令

第二种:head 命令

第三种:truncate 命令


在日常工作中,总会遇到各种各样的场景,要准备各种各样特征的测试数据。现在有一个场景,需要准备一个100M的大文件,你会怎么去实现呢?

一般拿到这类需求,首先会默认理解和业务相关联,针对这类情况的常规思路不外乎是: 

  • 如果业务侧有,请业务侧直接提供。 

  • 如果业务侧没有,便会基于业务文件特征通过 多个文件合并 或者 填充几张高清大图 / N多页的文本 来实现。

抛开业务特性,对到文件本身来说,除此之外呢,还有没有其他高效办法呢?答案肯定是有的,可以通过 命令行的模式来生成

第一种:dd 命令

## 创建一个 2M 大小的文件
## 特殊设备文件除了 /dev/zero 还有 /dev/random、/dev/urandom
dd if=/dev/zero of=largefile.txt bs=1M count=2
dd if=/dev/random of=cc3.txt bs=1M count=2

## 复制文件内容,从 a 文件到 b 文件,
dd if=a.txt of=b.txt bs=1M

第二种:head 命令

## head 命令通常用于显示文件的开头部分,这里是非标准用法
## 102400 单位是字节
head -c 102400 /dev/urandom > largefile2.txt

第三种:truncate 命令

## truncate 命令是一个用于改变文件大小的命令行工具,比 dd 更快更高效
truncate -s 5M largefile3.txt

最后说明下,因为不同的操作系统环境,命令及实现可能存在些许不同,所以请以自身环境为主,寻找适用自身环境的命令。笔者这里是用 Mac 电脑完成的测试,这里有 2 点注意事项提醒下大家:

  1. 未提前创建好目标文件,通过命令行创建的文件,虽然文件类型正确,大小可达到,但是用常用的文档工具,比如 microsoft word、wps 等打不开,提示无法识别

  2. 已提前创建好的目标文件,通过命令行来完成大小的设置,这种情况下,大小可正常达到,且用常用的文档工具,是正常打开。

今日分享到这里就结束啦,大家可以去体验玩一玩,感受感受。欢迎一键三连,😄

<think>好的,我现在要帮用户解决如何用Shell脚本通过for循环批量创建文件的问题。首先,我需要回顾用户之前的提问和之前的回答,看看有没有相关的信息可以参考。用户之前提到了使用for循环合并文件和批量创建用户,现在想了解如何批量创建文件。 用户提供的引用中有三个例子:合并txt文件、批量创建用户和使用for循环创建多个文件。特别是第三个引用提到了使用for循环和awk来创建文件,但用户现在可能想要更基础的实现方法,而不是复杂的awk脚本。因此,我应该专注于基本的for循环结构,结合文件创建命令。 用户上一次的问题是关于Shell脚本循环与top命令的结合应用,但现在的问题转向了文件创建。我需要确保回答结构清晰,分步骤说明,同时符合用户提到的系统级指令,比如使用正确的中文回答、LaTeX格式的数学表达式等,但这里可能不需要数学公式,主要关注代码结构。 接下来,我需要考虑用户可能的实际需求。批量创建文件通常用于自动化测试、生成日志文件、初始化项目结构等场景。因此,提供多种不同的循环示例会有帮助,比如按数字序列、按日期、按列表内容等,满足不同情况下的需求。 另外,用户可能对权限、覆盖提示、动态文件名生成等细节感兴趣。例如,如何避免覆盖已有文件,如何生成带有时间戳的文件名,或者如何根据输入参数创建文件。这些进阶技巧能提升脚本的实用性。 还要注意代码的正确性和最佳实践,比如使用大括号扩展{1..N}的效率,循环中的错误处理,以及使用touch命令创建文件。同时,需要提醒用户注意循环中的变量扩展和引号使用,避免文件名中有空格导致的问题。 最后,生成相关问题,帮助用户深入学习和解决可能遇到的后续问题。例如,如何添加内容到文件,如何处理文件名中的特殊字符,如何批量修改文件权限等。这些问题可以引导用户进一步探索Shell脚本的功能。</think>### Shell脚本通过for循环批量创建文件实现指南 根据您提供的引用案例[^1][^2][^3],结合Shell脚本循环核心原理,以下是6种典型实现方案: --- #### 一、基础数字序列模式 ```bash # 创建file1.txt到file5.txt for i in {1..5} do touch "file${i}.txt" # 使用touch命令创建文件 done # 带前缀和固定后缀 prefix="log_" for num in $(seq 10 15) # 生成10-15序列 do echo "创建时间: $(date)" > "${prefix}${num}.log" done ``` *特性:* 使用大括号扩展{1..N}效率高于`seq`命令[^1] --- #### 二、动态内容生成模式 ```bash # 根据列表内容创建文件 city_list=("beijing" "shanghai" "guangzhou") for city in "${city_list[@]}" do cat <<-EOF > "${city}_data.csv" City,Population,GDP $city,2154万,5030亿元 EOF done ``` *输出效果:* 生成带结构化数据的CSV文件 --- #### 三、日期序列模式 ```bash # 创建最近3天的日志文件 for day in $(seq 0 2) do filename=$(date -d "$day days ago" +"%Y%m%d").log touch "access_${filename}" done ``` *生成示例:* access_20230720.log, access_20230719.log, access_20230718.log --- #### 四、条件判断增强版 ```bash # 带存在性检查的创建 target_dir="/var/reports" mkdir -p "$target_dir" for i in {1..8} do filepath="${target_dir}/report_${i}.md" if [ ! -f "$filepath" ]; then touch "$filepath" echo "创建文件: $filepath" else echo "文件已存在: $filepath" >&2 fi done ``` --- #### 五、参数化批量创建 ```bash #!/bin/bash # 用法: ./create_files.sh 前缀 起始编号 结束编号 prefix=$1 start=$2 end=$3 for ((i=start; i<=end; i++)) do filename="${prefix}_$(printf "%03d" $i).txt" # 编号补零 echo "自动生成内容 $i" > "$filename" done ``` *执行示例:* `./create_files.sh data 5 12` 生成data_005.txt到data_012.txt --- #### 六、模板文件复制模式 ```bash # 根据模板批量生成配置文件 template="app.conf.template" for env in "dev" "test" "prod" do sed "s/{{ENV}}/$env/g" "$template" > "app_${env}.conf" done ``` *模板示例:* 包含`{{ENV}}`占位符的配置文件模板 --- ### 进阶技巧 1. **并行创建加速**(GNU parallel): ```bash parallel touch report_{}.txt ::: {A..Z} ``` 2. **动态内容注入**: ```bash for i in {1..7}; do echo "第$i次测试 $(date +%s)" > "test_$i.log" done ``` 3. **权限控制**: ```bash for file in data_*.csv; do chmod 600 "$file" chown www-data:www-data "$file" done ``` --- ### 错误处理建议 1. 在循环开始前添加`set -euo pipefail`进行严格错误检测 2. 文件名包含空格时使用双引号包裹变量:`"$filename"` 3. 使用`mktemp`命令创建临时文件时确保唯一性 [^1]: 大括号扩展语法参考自Bash手册的Brace Expansion章节 [^2]: 参数化脚本设计模式参考Linux系统管理最佳实践 [^3]: 并行处理方案基于GNU Parallel工具文档
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值