如何用Bash从文件名提取内容创建指定嵌套目录
从文件名提取目录并分两步创建嵌套目录
下面是具体实现步骤,全程用Bash内置功能完成,无需额外工具:
1. 定义文件名变量
先把目标文件名赋值给变量,方便后续操作:
filename="assignment_UA_InleidingProgrammeren_Huistaak1-HelloWorld_2019-11-11.tgz"
2. 提取两个目录名
这里提供两种纯Bash的提取方式,选一种即可:
方式一:数组分割(直观易懂)
通过下划线分割文件名成数组,直接取对应位置的元素:
# 按下划线分割字符串为数组 IFS="_" read -ra dir_parts <<< "$filename" # 数组第3个元素是InleidingProgrammeren(下标从0开始) dir1="${dir_parts[2]}" # 数组第4个元素是Huistaak1-HelloWorld dir2="${dir_parts[3]}"
方式二:参数展开(无需额外命令)
利用Bash的参数展开功能,通过匹配模式截取字符串:
# 去掉开头的"assignment_UA_",再截取第一个下划线前的内容 dir1="${filename#assignment_UA_}" dir1="${dir1%%_*}" # 去掉"InleidingProgrammeren_"之前的所有内容,再截取第一个下划线前的内容 dir2="${filename#*_InleidingProgrammeren_}" dir2="${dir2%%_*}"
3. 分两步创建嵌套目录
严格按照要求分两步操作,禁止直接创建层级:
# 第一步:创建第一层目录 mkdir "$dir1" # 第二步:在第一层目录下创建第二层目录 mkdir "$dir1/$dir2"
也可以先进入第一层目录再创建,效果一致:
mkdir "$dir1" cd "$dir1" mkdir "$dir2" # 可选:回到原工作目录 cd "$OLDPWD"
完整可运行代码
filename="assignment_UA_InleidingProgrammeren_Huistaak1-HelloWorld_2019-11-11.tgz" # 用数组分割法提取目录名 IFS="_" read -ra dir_parts <<< "$filename" dir1="${dir_parts[2]}" dir2="${dir_parts[3]}" # 分两步创建目录 mkdir "$dir1" mkdir "$dir1/$dir2"
内容的提问来源于stack exchange,提问作者FieldyScop
相关产品推荐
相关产品推荐

