菜鸟科技网

Unix 重命名命令有哪些常用方法?

mv 命令 (Move/Rename)

mv 命令是 "move" 的缩写,它的核心功能是移动文件或目录,但当源和目标在同一个目录下时,它的行为就变成了“重命名”。

Unix 重命名命令有哪些常用方法?-图1
(图片来源网络,侵删)

基本语法

mv [选项] 源文件 目标文件
mv [选项] 源目录 目标目录

重命名单个文件

这是 mv 最简单的用法。

示例:old_name.txt 重命名为 new_name.txt

mv old_name.txt new_name.txt

重命名目录

mv 同样可以用来重命名整个目录。

示例:old_folder 重命名为 new_folder

Unix 重命名命令有哪些常用方法?-图2
(图片来源网络,侵删)
mv old_folder new_folder

mv 的局限性

mv 一次只能处理一个文件的重命名(除非配合通配符和循环),如果你想批量重命名,比如将所有 .txt 文件的后缀改为 .mdmv 本身无法直接完成,需要结合 for 循环等其他命令。

示例: 使用 for 循环批量重命名

# 将当前目录下所有 .txt 文件的后缀改为 .md
for file in *.txt; do
  mv "$file" "${file%.txt}.md"
done
  • "${file%.txt}" 是一种参数扩展,它会移除变量 $file 末尾的 .txt 字符串。

rename 命令 (批量重命名)

rename 命令是专门为批量重命名而设计的,非常强大和灵活。注意: rename 命令在 Linux 和 macOS 上的实现不同,这是一个非常重要的区别。

Linux 上的 rename (Perl 版本)

现代 Linux 发行版(如 Ubuntu, Debian, CentOS 7+)通常安装的是基于 Perl 的 rename 命令,功能非常强大。

Unix 重命名命令有哪些常用方法?-图3
(图片来源网络,侵删)

基本语法

rename 'Perl表达式' 文件列表

工作原理: rename 会将 Perl表达式 应用到 文件列表 中的每一个文件名上,如果表达式返回真,则执行重命名操作。

常用示例:

示例 1:批量修改文件后缀

将当前目录下所有 .txt 文件的后缀改为 .md

rename 's/\.txt$/\.md/' *.txt
  • s/.../.../:这是 Perl 的替换操作符。
  • \.txt$:匹配以 .txt 结尾的文件名。\ 是转义符, 表示字符串末尾。
  • \.md:替换为 .md

示例 2:批量添加前缀

给所有 .jpg 文件名前添加 prefix_

rename 's/^/prefix_/' *.jpg
  • ^:匹配字符串的开头。

示例 3:批量删除后缀

移除所有 .bak 文件的后缀。

rename 's/\.bak$//' *.bak
  • 替换部分为空 ,表示删除匹配的内容。

示例 4:批量修改文件名中的字符

将所有文件名中的 old_string 替换为 new_string

rename 's/old_string/new_string/' *

示例 5:将文件名转为小写

将所有文件名转换为小写。

rename 'y/A-Z/a-z/' *
  • y/.../.../ 是 Perl 的字符替换操作符。

macOS 上的 rename (BSD 版本)

macOS 自带的 rename 命令功能相对简单,语法也完全不同。

基本语法

rename -n old_string new_string 文件列表
  • -n非常重要! 这个选项表示 "no-op"(只显示将要做什么,但不实际执行),为了安全起见,第一次运行时最好都带上它,确认无误后再去掉 -n

常用示例:

示例 1:批量修改文件后缀

将所有 .txt 文件的后缀改为 .md

# 先预览
rename -n .txt .md *.txt
# 确认无误后,执行
rename .txt .md *.txt

示例 2:批量添加前缀

给所有 .jpg 文件名前添加 prefix_

# 先预览
rename -n '' 'prefix_' *.jpg
# 确认无误后,执行
rename '' 'prefix_' *.jpg
  • old_string 设为空,表示在文件名开头插入 new_string

prename 命令 (Perl 版本的替代方案)

如果你在 macOS 上想使用 Linux 那样强大的 Perl 版本 rename,或者你的 Linux 系统上安装的是旧版 rename,一个很好的替代方案是安装 prenameprename 通常是 rename 的一个符号链接,指向 Perl 脚本,其行为与 Linux 上的 Perl 版本 rename 完全一致。

在 macOS 上,可以使用 Homebrew 安装:

brew install rename

安装后,命令名就是 rename,但它已经是功能强大的 Perl 版本了。


总结与对比

特性 mv 命令 rename (Linux Perl) rename (macOS BSD)
主要用途 移动文件、重命名单个文件 批量重命名 简单的批量重命名
语法 mv old_name new_name rename 's/old/new/' files rename old new files
灵活性 低,需要结合循环实现批量 极高,支持复杂的 Perl 正则表达式 低,仅支持简单的字符串替换
学习曲线 非常简单 较高,需要了解 Perl 正则表达式 简单
默认安装 所有 Unix/Linux/macOS 大多数现代 Linux 发行版 macOS 系统自带
推荐场景 日常的单个文件/目录重命名 任何复杂的批量重命名任务 简单的、统一的字符串替换任务

如何确定你使用的是哪个 rename

你可以在终端中运行 man rename 查看手册页,如果手册页的内容涉及 Perl 正则表达式,那么你使用的是 Perl 版本,如果内容非常简短,只描述了 -n 等几个简单选项,那么你使用的是 BSD 版本。

# 查看手册页
man rename
# 或者查看命令的详细路径
which rename
# /usr/bin/rename (通常是 Linux Perl 版本)
# /usr/bin/rename (macOS 上是 BSD 版本)
# /opt/homebrew/bin/rename (macOS 上通过 Homebrew 安装的 Perl 版本)

实践建议:

  • 对于单个文件的重命名,直接使用 mv 即可。
  • 对于复杂的批量重命名,强烈推荐使用 Linux Perl 版本的 rename,如果你在 macOS 上,建议通过 brew install rename 安装它。
  • 如果你只需要做一些非常简单的批量替换,并且你确定自己使用的是 macOS,那么自带的 BSD rename 也可以应付,但请务必记得先用 -n 选项预览。
分享:
扫描分享到社交APP
上一篇
下一篇