在Bash中根据文件名固定位置关键词将文件移动到对应子文件夹
Bash 批量按文件名分类移动文件实现方案
实现逻辑
基于你给出的固定文件名格式,按下划线拆分字段后,第6个字段就是要求的分类关键词(第五个下划线之后、Dl字段之前的内容),逻辑如下:
- 遍历匹配前缀的目标文件,避免误操作无关文件
- 提取每个文件的分类关键词
- 自动创建对应分类目录(已存在则跳过)
- 将文件移动到对应分类目录
测试验证(优先执行,仅打印操作不实际生效)
先执行以下命令输出所有待执行操作,确认分类规则符合预期:
for file in Gmc_W_GCtl_*; do category=$(echo "$file" | cut -d'_' -f6) echo "mkdir -p \"$category\" && mv \"$file\" \"$category/\"" done
检查输出的分类目录名和对应文件是否匹配,确认无误后再执行实际操作。
实际执行命令
for file in Gmc_W_GCtl_*; do category=$(cut -d'_' -f6 <<< "$file") mkdir -p "$category" mv -- "$file" "$category/" done
参数说明
cut -d'_' -f6:指定下划线为分隔符,提取第6个字段作为分类关键词,完全匹配你要求的截取范围mkdir -p:自动创建不存在的分类目录,目录已存在时不会报错mv --:避免文件名以-开头时命令识别异常,提升兼容性- 前缀匹配
Gmc_W_GCtl_*:仅处理符合命名规则的目标文件,避免误操作目录下其他无关文件;如果确定要处理目录下所有文件,可替换为*
注意事项
- 操作前建议先备份全部目标文件,避免误操作导致文件丢失
- 必须先执行测试验证步骤,确认分类逻辑正确后再执行实际移动操作
内容的提问来源于stack exchange,提问作者user9006908
相关产品推荐
相关产品推荐

