当前位置:首页 > Linux > 正文

如何在Linux中批量修改文件名?

在Linux中批量修改文件名可通过命令行工具实现,常用方法包括:,1. 使用 rename命令进行正则替换,例如将所有 .txt改为 .md: rename 's/.txt$/.md/' *.txt,2. 结合 find与 xargs处理子目录文件,3. 用 for循环遍历文件并执行 mv操作,4. 通配符匹配特定文件模式,注意操作前备份数据避免误覆盖。

在Linux系统中,批量修改文件名是常见的文件管理需求,无论是整理照片、日志文件还是代码项目,以下详细介绍四种专业可靠的方法,涵盖不同场景和复杂度,操作前请务必备份数据,避免误操作。


rename 命令(推荐高效方法)

rename 是专为批量重命名设计的工具,支持正则表达式,注意不同发行版可能预装不同版本:

  • Perl版本(常见于Ubuntu/Debian):语法灵活,支持正则替换

  • util-linux版本(常见于CentOS/RHEL):功能较基础

    如何在Linux中批量修改文件名? 第1张

    # 通配符模式:将前缀 "video_" 改为 "clip_" rename video_ clip_ video_*.mp4

    提示

    • 使用 rename --help 确认版本
    • 测试命令:先执行 rename -n 's/old/new/' *.txt(-n 参数模拟运行)
    • Shell循环 + mv 命令(通用基础方法)

      通过 for 循环结合 mv 命令,适合简单修改或无 rename 的环境:

      如何在Linux中批量修改文件名? 第2张

      关键技巧

      • ${file// /_} 是Bash的字符串替换语法
      • 处理特殊字符(如空格)时,变量必须用双引号包裹 "$file"


      mmv 工具(直观通配符匹配)

      安装后可通过通配符批量移动/重命名文件:

      # 安装(Debian/Ubuntu) sudo apt install mmv # 将 "photo_2022_*.png" 改为 "2022_photo_*.png" mmv "photo_2022_*.png" "2022_photo_#1.png"

      • #1 表示匹配的第一个通配符部分
      • 支持 (任意字符)和 (单个字符)


      find + 循环(递归子目录操作)

      需修改子目录中的文件时,结合 find 和循环:

      如何在Linux中批量修改文件名? 第3张

      # 递归将 .html 文件扩展名改为 .php find . -type f -name "*.html" -exec sh -c ' for file; do mv "$file" "${file%.html}.php" done ' sh {} +

      参数解析

      • -type f:仅查找文件
      • -exec ... +:高效传递结果给后续命令
      • ${file%.html}:删除字符串末尾的 .html


      注意事项(安全操作指南)

      1. 备份文件

        执行前创建备份:cp -r original_dir/ backup_dir/

      2. 测试命令

        用 echo 预览结果(如 echo mv "old" "new")

      3. 处理特殊字符

        文件名含空格、括号时,始终用引号包裹变量("$file")

      4. 权限问题

        若提示权限不足,用 sudo 或 chmod 调整目录权限


      方法选择建议

      场景 推荐工具
      简单替换/前缀后缀 Shell循环
      复杂正则表达式 rename (Perl版)
      子目录递归操作 find + 循环
      直观通配符匹配 mmv

      引用说明:本文方法基于Linux核心工具(GNU Bash, util-linux, Perl rename),参考Linux man-pages及社区实践,操作前建议查阅相关命令的 man 手册(如 man rename)。

      通过上述方法,可高效完成99%的批量重命名需求,复杂场景建议分步测试,确保数据安全。

0