Linux中批量重命名文件最强大的工具是Perl版本的rename命令,它支持正则表达式,能精确匹配并替换文件名模式,如更改扩展名、替换字符串、添加前缀后缀等;其核心语法为rename 's/旧模式/新模式/' 文件通配符,利用^、$、捕获组$1等实现复杂操作;与简单字符串替换的util-linux版rename不同,Perl版功能更强大,适用于复杂场景;使用时应优先通过-n或--dry-run模拟运行,避免误操作,同时注意文件名特殊字符转义、权限及命名冲突问题,确保操作安全可靠。

在Linux中批量重命名文件,最强大且灵活的工具无疑是
rename
mv
批量重命名文件的核心在于利用
rename
rename
最常见的用法是:
rename 's/旧模式/新模式/' 文件通配符
这里的
s/旧模式/新模式/
s
旧模式
新模式
\1
\2
/
s#旧模式#新模式#
文件通配符
*
*.txt
一些实用例子:
更改文件扩展名: 假设你有一堆
.JPG
.JPG
rename 's/\.JPG$/.jpg/' *.JPG
\.
$
替换文件名中的特定字符串: 把所有文件名中的
旧项目
新项目
rename 's/旧项目/新项目/g' *
g
旧项目
删除文件名中的某个部分: 比如,删除所有文件名前缀的
temp_
rename 's/^temp_//' *
^
添加前缀或后缀: 给所有
.txt
final_
rename 's/^/final_/' *.txt
_backup
rename 's/(\.\w+)$/_backup$1/' *
(\.\w+)$
$1
安全提示: 在执行任何批量重命名操作之前,强烈建议使用
--dry-run
-n
rename -n 's/旧模式/新模式/' *
rename
在Linux世界里,
rename
一种是来自
util-linux
rename
rename 旧字符串 新字符串 文件...
rename
foo
bar
rename foo bar *.txt
另一种,也是我个人更偏爱且功能更强大的,是基于Perl的
rename
perl-rename
prename
rename
rename 's/正则表达式/替换字符串/标志' 文件...
^
$
.
*
+
?
()
\1
\2
i
g
例如,如果你想把所有
.JPG
.JPG
JPG
rename
rename 's/\.JPG$/.jpg/' *.JPG
util-linux
rename
在大多数现代Linux发行版(如Ubuntu、Debian、Fedora等)中,默认安装的
rename
man rename
util-linux
当你掌握了Perl版本的
rename
核心概念:
匹配特殊字符:
.
*
+
?
^
$
[]
[abc]
a
b
c
[^]
[^0-9]
\d
[0-9]
\w
[a-zA-Z0-9_]
\s
\
\.
捕获组与反向引用: 这是Regex最强大的特性之一。使用圆括号
()
\1
\2
高级应用示例:
重组文件名顺序: 假设你有一些文件命名为
日期_事件_描述.txt
事件_日期_描述.txt
2023-10-26_会议_总结.txt
会议_2023-10-26_总结.txt
rename 's/^(\d{4}-\d{2}-\d{2})_(.+?)_(.+)\.txt$/$2_$1_$3.txt/' *.txt^(\d{4}-\d{2}-\d{2})$1
(.+?)
$2
(.+)
.txt
$3
\.txt$
批量修改大小写: 将所有
.txt
.JPG
rename 's/\.(TXT|JPG)$/\L$1/i' *
(TXT|JPG)
TXT
JPG
\L$1
$1
i
TXT
TXT
TXT
删除文件名中的数字序列(如果它们在特定位置): 假设文件名是
report_2023_data.csv
rename 's/_(?:\d{4})_/_/' *(?:\d{4})$1
_2023_
_
替换文件名中的空格为下划线,并处理多个空格:
rename 's/\s+/_/g' *
\s+
g
正则表达式的学习曲线可能有点陡峭,但一旦掌握,它在文件管理、文本处理等方面的效率提升是巨大的。我的建议是,从简单的模式开始,多使用
--dry-run
rename
批量重命名文件是一个强大的功能,但它也像一把双刃剑,一个不小心就可能导致文件丢失或混乱。我自己在实践中也踩过不少坑,所以总结了一些经验,希望能帮助你规避那些常见的错误和陷阱。
永远、永远先进行模拟运行(Dry Run): 这是最最关键的一步,没有之一。
rename
--dry-run
-n
rename -n 's/旧模式/新模式/' *
-n
备份重要文件: 虽然有
--dry-run
精确匹配,避免过度泛化: 通配符
*
.*
.txt
*.txt
*
^
$
处理特殊字符: 文件名中包含空格、括号、
&
#
rename
rename 's/ /_/' "我的 文件.txt"
.
*
(
)
旧模式
\
\.
理解贪婪与非贪婪匹配: 正则表达式中的
*
+
?
*?
+?
文件权限问题: 确保你对要重命名的文件所在的目录有写入权限。如果没有,即使命令语法正确,也会因为权限不足而失败。
潜在的文件名冲突: 如果你的重命名操作会导致两个不同的文件最终拥有相同的名字,
rename
命令的顺序: 如果你需要执行多个重命名步骤,比如先删除前缀,再更改扩展名,那么这些步骤的执行顺序很重要。一个步骤的输出会成为下一个步骤的输入。
遵循这些注意事项,你会发现批量重命名不再是令人胆战心惊的操作,而是一个高效、可靠的文件管理利器。
以上就是如何在Linux中批量重命名 Linux rename通配符技巧的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号