插件窝 干货文章 linux rename如何批量修改文件名

linux rename如何批量修改文件名

rename 文件名 递归 bash 256    来源:    2025-04-25

在Linux中,可以使用rename命令来批量修改文件名。rename命令支持正则表达式,可以非常灵活地批量重命名文件。以下是几种常见的用法:


1. 基本语法

rename 's/原字符串/新字符串/' 文件匹配模式
  • s/原字符串/新字符串/:使用正则表达式替换文件名中的内容。
  • 文件匹配模式:可以是*(所有文件)或*.txt(特定扩展名的文件)等。

2. 常见用法示例

(1) 修改文件扩展名(如 .txt.md

rename 's/\.txt$/.md/' *.txt
  • \.txt$ 匹配以 .txt 结尾的文件名。
  • .md 替换为新的扩展名。

(2) 在文件名前添加前缀

rename 's/^/prefix_/' *
  • ^ 匹配文件名开头。
  • prefix_ 是添加的前缀。

(3) 在文件名后添加后缀

rename 's/$/_suffix/' *
  • $ 匹配文件名结尾。
  • _suffix 是添加的后缀。

(4) 删除文件名中的某些字符

rename 's/要删除的字符串//' *

例如,删除文件名中的old_

rename 's/old_//' *

(5) 大小写转换(如全小写 → 全大写)

rename 'y/a-z/A-Z/' *
  • y/a-z/A-Z/ 将所有小写字母转换为大写。

(6) 替换文件名中的空格为下划线

rename 's/ /_/g' *
  • g 表示全局替换(所有空格)。

3. 测试模式(预览更改)

使用 -n--dry-run 参数可以预览重命名效果(不实际执行):

rename -n 's/old/new/' *

4. 注意事项

  1. 备份文件:批量重命名前建议先备份文件,避免误操作。
  2. 区分版本
    • Perl版本的rename(支持正则表达式,常用语法如上)。
    • 如果系统默认是util-linux版本的rename,语法不同(更简单但不支持正则),可能需要安装Perl版本: bash sudo apt install rename # Debian/Ubuntu sudo yum install prename # CentOS/RHEL
  3. 递归操作rename默认不递归子目录,如需递归,可结合findbash find . -name "*.txt" -exec rename 's/\.txt$/.md/' {} \;

5. 替代方案(mmvfor 循环)

如果rename不可用,可以用以下方法:

(1) 使用 mmv 工具

mmv '*.txt' '#1.md'

(2) 使用 for 循环

for file in *.txt; do mv "$file" "${file%.txt}.md"; done

总结

  • Perl rename 是最强大的批量重命名工具,适合复杂场景。
  • 简单操作也可以用mv结合Shell循环实现。

如果有具体需求(如递归、特殊字符处理等),可以进一步调整命令!