如何用Bash命令按前缀数字将文件夹内文件移入子文件夹?
按数字前缀批量移动JPG文件到对应子文件夹的Bash方案
一步到位的命令脚本
先切换到你的images目录(替换成实际路径):
cd /path/to/your/images
然后执行以下循环命令:
for file in [0-9]*.jpg; do # 提取文件名开头的连续数字前缀 prefix=${file%%[^0-9]*} # 创建目标子文件夹(已存在则无操作) mkdir -p "images_$prefix" # 移动文件到对应文件夹 mv "$file" "images_$prefix/" done
关键部分解释
[0-9]*.jpg:仅匹配以数字开头的JPG文件,过滤掉不符合命名规则的文件,避免误操作${file%%[^0-9]*}:Bash参数扩展语法,从文件名末尾截断第一个非数字字符及之后的内容,精准提取开头的连续数字前缀。例如456_photo.jpg会提取出456,7_pic.jpg会提取出7mkdir -p:-p参数确保文件夹不存在时自动创建,若已存在则不会抛出错误,避免中断循环- 双引号包裹文件名:防止文件名包含空格、特殊字符时出现解析错误
测试建议(安全起见)
如果不确定命令效果,可以先替换mv为echo mv,这样只会打印将要执行的移动操作,不会实际移动文件:
for file in [0-9]*.jpg; do prefix=${file%%[^0-9]*} mkdir -p "images_$prefix" echo mv "$file" "images_$prefix/" done
确认输出的移动命令符合预期后,再去掉echo执行实际移动。
内容的提问来源于stack exchange,提问作者Alex Martin
相关产品推荐
相关产品推荐

