You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Terminal批量重命名脚本以处理一级子文件夹内的文件?

修改后的脚本方案

方案1:沿用原sed逻辑,遍历一级子目录处理图片

# 遍历当前父目录下的所有一级子文件夹
for dir in */; do
    # 进入子文件夹,进入失败则跳过
    cd "$dir" || continue
    
    # 只处理jpg格式图片,可按需扩展其他格式
    for file in *.jpg; do
        # 跳过不存在的文件(避免匹配不到文件时处理"*.jpg"字符串)
        [[ -f "$file" ]] || continue
        
        # 检查文件名是否包含下划线
        if [[ "$file" == *"_"* ]]; then
            # 提取首个下划线后的内容作为新文件名
            new_name=$(echo "$file" | sed 's/^[^_]*_//')
            # 执行重命名
            mv "$file" "$new_name"
        fi
    done
    
    # 返回父目录
    cd ..
done

方案2:用bash参数展开优化(无需调用sed,更高效)

利用bash原生的参数展开功能,省去外部sed命令的调用,执行效率更高:

for dir in */; do
    cd "$dir" || continue
    
    for file in *.jpg; do
        [[ -f "$file" ]] || continue
        
        if [[ "$file" == *"_"* ]]; then
            # ${file#*_} 表示删除从开头到第一个下划线(含下划线)的部分
            new_name="${file#*_}"
            mv "$file" "$new_name"
        fi
    done
    
    cd ..
done

关键修改说明

  • 外层循环for dir in */:专门匹配当前目录下的所有一级子文件夹,仅处理一级目录符合需求
  • cd "$dir" || continue:容错处理,避免因权限或目录异常导致后续命令出错
  • 内层循环限定为*.jpg:只处理图片文件,防止误改子文件夹内的非图片文件,可扩展为*.{jpg,jpeg,png,gif}覆盖更多常见图片格式
  • [[ -f "$file" ]] || continue:避免子文件夹内无对应格式文件时,脚本把通配符字符串当作文件名处理

内容的提问来源于stack exchange,提问作者Tony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 09:57:39