上一篇
如何在Linux中批量修改文件名?
- Linux
- 2025-06-13
- 4339
在Linux中批量修改文件名可通过命令行工具实现,常用方法包括:,1. 使用
rename命令进行正则替换,例如将所有
.txt改为
.md:
rename 's/.txt$/.md/' *.txt,2. 结合
find与
xargs处理子目录文件,3. 用
for循环遍历文件并执行
mv操作,4. 通配符匹配特定文件模式,注意操作前备份数据避免误覆盖。
在Linux系统中,批量修改文件名是常见的文件管理需求,无论是整理照片、日志文件还是代码项目,以下详细介绍四种专业可靠的方法,涵盖不同场景和复杂度,操作前请务必备份数据,避免误操作。
rename 命令(推荐高效方法)
rename 是专为批量重命名设计的工具,支持正则表达式,注意不同发行版可能预装不同版本:
-
Perl版本(常见于Ubuntu/Debian):语法灵活,支持正则替换
# 将所有 .txt 文件中的 "old" 替换为 "new" rename 's/old/new/' *.txt # 示例:将 file1.jpg, file2.jpg 改为 image1.jpg, image2.jpg rename 's/file/image/' *.jpg
-
util-linux版本(常见于CentOS/RHEL):功能较基础

# 通配符模式:将前缀 "video_" 改为 "clip_" rename video_ clip_ video_*.mp4
提示:
- 使用
rename --help确认版本 - 测试命令:先执行
rename -n 's/old/new/' *.txt(-n参数模拟运行)
- 使用
Shell循环 + mv 命令(通用基础方法)
通过 for 循环结合 mv 命令,适合简单修改或无 rename 的环境:
# 为所有 .log 文件添加前缀 "backup_"
for file in *.log; do
mv "$file" "backup_$file"
done
# 删除文件名中的空格(替换为下划线)
for file in * *; do
mv "$file" "${file// /_}"
done
关键技巧:

${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 和循环:
# 递归将 .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
注意事项(安全操作指南)
- 备份文件:
执行前创建备份:cp -r original_dir/ backup_dir/ - 测试命令:
用echo预览结果(如echo mv "old" "new") - 处理特殊字符:
文件名含空格、括号时,始终用引号包裹变量("$file") - 权限问题:
若提示权限不足,用sudo或chmod调整目录权限
方法选择建议
| 场景 | 推荐工具 |
|---|---|
| 简单替换/前缀后缀 | Shell循环 |
| 复杂正则表达式 | rename (Perl版) |
| 子目录递归操作 | find + 循环 |
| 直观通配符匹配 | mmv |
引用说明:本文方法基于Linux核心工具(GNU Bash, util-linux, Perl rename),参考Linux man-pages及社区实践,操作前建议查阅相关命令的
man手册(如man rename)。
通过上述方法,可高效完成99%的批量重命名需求,复杂场景建议分步测试,确保数据安全。
