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

Ubuntu:批量重命名不同目录下的多个文件

一次性批量重命名多目录下的文件方案

当然可以一次性完成所有目录下的文件重命名!你之前的命令只能单目录操作,我们可以通过嵌套循环的Shell脚本实现全自动化批量处理,不用逐个目录手动执行命令。

核心思路

遍历所有目标目录,先提取每个目录的序号(比如Dir1对应序号1,Dir62对应序号62),再在每个目录内按顺序给文件重命名为目录序号_01、目录序号_02的格式。

可直接使用的Shell脚本

#!/bin/bash

# 遍历所有以Dir开头的目录(可根据实际目录名修改匹配规则)
for dir in Dir*; do
    # 跳过不是目录的项(防止匹配到文件)
    [ -d "$dir" ] || continue
    
    # 提取目录的数字序号(比如Dir1 → 1,Dir62 → 62)
    dir_num=$(echo "$dir" | sed 's/Dir//')
    
    # 初始化文件计数器,从1开始
    file_count=1
    
    # 遍历当前目录下的所有文件(跳过子目录)
    for file_path in "$dir"/*; do
        [ -f "$file_path" ] || continue
        
        # 格式化计数器为两位数字(1 → 01,10 → 10)
        formatted_count=$(printf "%02d" "$file_count")
        
        # 获取文件原后缀名(保留原格式,如原文件是jpg就保留jpg)
        file_ext="${file_path##*.}"
        
        # 执行重命名操作
        mv "$file_path" "$dir/${dir_num}_${formatted_count}.${file_ext}"
        
        # 计数器自增
        ((file_count++))
    done
done

脚本关键细节说明

  • 目录匹配规则:Dir*会匹配所有以Dir开头的目录,如果你的目录命名不是这个格式(比如folder_1),可以修改为对应的匹配模式,或者用正则更精准提取序号。
  • 序号提取:sed 's/Dir//'用于移除目录名中的Dir前缀,提取纯数字序号。如果目录名格式不同,比如Folder-05,可以调整为sed 's/Folder-//'。
  • 两位数字编号:printf "%02d"确保编号是两位,满足01、02的格式要求,避免出现1、2的单数字情况。
  • 特殊字符兼容:所有变量都用双引号包裹,能正确处理文件名包含空格、特殊符号的情况。

注意事项

  1. 先备份! 批量重命名前建议复制一份整个目录结构到测试文件夹,先测试脚本,避免误操作导致文件丢失。
  2. 过滤文件类型:如果只想处理特定类型的文件(比如只重命名.png),可以把"$dir"/*改成"$dir"/*.png。
  3. 跳过子目录:脚本中的[ -f "$file_path" ] || continue会跳过目录下的子目录,只处理普通文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:28:13