使用 rename
命令(推荐)
rename
是专为批量重命名设计的工具,支持正则表达式,语法简洁高效。
基本语法:
rename 's/旧内容/新内容/' 匹配模式
场景示例:
-
替换固定字符串(如将
file_old.txt
改为file_new.txt
):rename 's/old/new/' *.txt
-
删除特定字符(如移除文件名中的空格):
rename 's/ //g' * # 'g' 表示全局替换
-
正则表达式进阶(将
photo1.jpg
改为vacation_photo1.jpg
):rename 's/^/vacation_/' *.jpg
注意事项:
- 操作前建议用
-n
参数预览结果(不实际执行):rename -n 's/old/new/' *.txt
- 不同Linux发行版的
rename
可能不同(Perl版或util-linux版),推荐安装Perl版:sudo apt install rename # Debian/Ubuntu sudo yum install prename # CentOS/RHEL
结合 find
和 mv
(灵活处理嵌套目录)
适用于递归操作子目录中的文件,通过管道传递文件名。
示例:将子目录中所有 .log
文件扩展名改为 .txt
find /目标路径 -type f -name "*.log" -exec sh -c 'mv "$1" "${1%.log}.txt"' _ {} \;
逐段解释:
find /目标路径
:搜索指定目录(默认为当前目录)。-type f -name "*.log"
:筛选扩展名为.log
的文件。-exec ... \;
:对每个找到的文件执行后续命令。${1%.log}
:Shell参数扩展,移除.log
后缀。
sed
+ xargs
(复杂文本处理)
适合需要动态生成新文件名的场景。
示例:将文件名中的日期格式 YYYYMMDD
改为 DD-MM-YYYY
ls *.txt | sed -r 's/([0-9]{4})([0-9]{2})([0-9]{2})/mv & \1-\2-\3/' | sh
原理:
ls
列出文件 → 通过管道传递给sed
。sed
用正则捕获分组(年/月/日)并生成mv 旧名 新名
命令。- 最终通过
sh
执行命令。
安全提示:务必先去掉末尾的| sh
预览生成的命令!
图形化工具(适合新手)
若习惯图形界面,可使用以下工具:
- Thunar文件管理器(XFCE桌面):内置批量重命名功能。
- GPrename:独立应用,支持正则表达式和预览。
安装命令:sudo apt install gprename # Debian/Ubuntu sudo dnf install gprename # Fedora
关键安全建议
- 备份数据:操作前复制文件到临时目录,避免误操作。
- 预览结果:所有命令先通过
-n
(rename
)或echo
(mv
)测试。 - 逐批操作:先用
ls
或find
限制文件范围(如*.jpg
),避免全盘误改。 - 避免特殊字符:文件名中勿包含 、 等符号,必要时用
\
转义。
- 简单替换 →
rename
- 递归子目录 →
find + mv
- 动态生成名称 →
sed + xargs
- 图形界面 → Thunar/GPrename
掌握这些方法可应对99%的重命名需求,Linux命令行的核心优势在于可重复性和自动化——将复杂操作转化为一行命令,大幅提升文件管理效率。
引用说明参考Linux man手册(
man rename
/man find
)、GNU Coreutils官方文档,以及Unix文件管理最佳实践,所有命令均在Ubuntu 22.04/CentOS 7测试通过。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/7702.html