如何自动创建同名文件夹并将不同扩展名的文件移动至对应目录
按文件名前缀自动分类移动文件的Shell脚本实现
你原有脚本硬编码了目标文件夹名称,且固定复制到单个目录,无法适配动态前缀的分类需求,以下是可直接使用的实现:
版本1:直接遍历当前目录下所有目标后缀文件
无需提前准备文件列表,自动识别.txt/.ascii/.mat后缀文件处理:
#!/bin/sh for file in *.txt *.ascii *.mat; do # 跳过无匹配文件时生成的通配符本身 [ -f "$file" ] || continue # 提取文件名前缀(删除最后一个.及之后的扩展名) target_dir="${file%.*}" # 自动创建目录,已存在时不会报错 mkdir -p "$target_dir" # 移动文件到对应目录,需保留原文件可将mv改为cp mv "$file" "$target_dir/" done
版本2:从list.txt读取指定文件处理
如果需要按你原有逻辑从预设的文件列表读取处理,使用以下兼容带空格文件名的版本:
#!/bin/sh # 使用while read替代for循环,避免文件名含空格时拆分错误 while IFS= read -r file; do [ -f "$file" ] || continue target_dir="${file%.*}" mkdir -p "$target_dir" mv "$file" "$target_dir/" done < list.txt
关键逻辑说明
${file%.*}是Shell原生参数扩展语法,作用是从变量值末尾删除最短的匹配.及后续内容,刚好实现提取不含扩展名的文件名前缀mkdir -p参数可以自动判断目录是否存在,不存在才创建,不会重复创建报错
内容的提问来源于stack exchange,提问作者manas
相关产品推荐
相关产品推荐

