菜鸟科技网

Mac命令行如何批量重命名文件?

在 macOS 的命令行(Terminal)中,有几种方法可以重命名文件,最常用和最强大的工具是 mv 命令,此外还有专门用于批量重命名的工具。

Mac命令行如何批量重命名文件?-图1
(图片来源网络,侵删)

使用 mv 命令(最常用)

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

基本语法

mv [源文件名] [新文件名]

示例

  1. 简单重命名 假设你有一个文件叫 report.txt,想把它重命名为 final_report.txt

    # 查看当前文件
    ls
    # 输出: report.txt
    # 执行重命名
    mv report.txt final_report.txt
    # 再次查看确认
    ls
    # 输出: final_report.txt
  2. 重命名时覆盖确认 如果新文件名已经存在,mv 默认会直接覆盖它,且不会有任何提示,为了避免意外覆盖,可以使用 -i (interactive) 选项。

    # 假设 final_report.txt 已经存在
    mv -i report.txt final_report.txt
    # final_report.txt 存在,系统会提示:
    # mv: overwrite 'final_report.txt'? y
    # 输入 'y' 确认覆盖,输入 'n' 或其他则取消。
  3. 移动并重命名 这其实是 mv 的主要功能,你可以将一个文件移动到另一个目录,并同时给它一个新的名字。

    Mac命令行如何批量重命名文件?-图2
    (图片来源网络,侵删)
    # 将当前目录的 'image.jpg' 移动到 'documents' 目录,并重命名为 'photo.jpg'
    mv image.jpg documents/photo.jpg

使用 rename 命令(批量重命名)

当你需要对多个文件进行有规律的重命名时,mv 命令会变得非常繁琐,这时 rename 命令就非常强大了。

注意: macOS 自带的 rename 命令功能非常有限(主要用于添加文件后缀),强烈建议安装功能更强大的 Perl 版本的 rename 命令。

安装 Perl 版本的 rename

使用 Homebrew 包管理器来安装,这是最简单的方式。

  1. 如果你还没有安装 Homebrew,请先安装:

    Mac命令行如何批量重命名文件?-图3
    (图片来源网络,侵删)
    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  2. 安装 rename

    brew install rename

    安装后,这个强大的 rename 命令通常会被命名为 prename 或直接覆盖系统自带的 rename,你可以通过 which rename 查看它指向哪里,下面我们假设它直接可用。

rename 命令基本语法

rename [选项] '表达式' 文件名...
  • 表达式:这是一个 Perl 正则表达式,用于匹配和替换文件名中的部分内容。
    • s/搜索模式/替换模式/:这是最常用的表达式,表示“替换”。
    • 搜索模式:你想要找到的字符串,可以使用正则元字符。
    • 替换模式:你想要替换成的字符串。
    • /g:全局替换,替换一行中所有匹配项,对于文件名通常需要。
    • /i:忽略大小写。

示例

假设当前目录有以下文件: IMG_001.jpg, IMG_002.jpg, IMG_003.jpg, notes.txt

  1. 统一添加前缀 给所有 .jpg 文件名前添加 vacation_

    rename 's/^/vacation_/' *.jpg
    • s/.../.../ 是替换操作。
    • ^ 是正则表达式,表示“字符串的开头”。
    • vacation_ 是要添加的内容。
    • *.jpg 是所有以 .jpg 结尾的文件。

    执行后,文件变为:vacation_IMG_001.jpg, vacation_IMG_002.jpg, ...

  2. 统一修改后缀 将所有 .jpg 文件的后缀修改为 .jpeg

    rename 's/\.jpg$/\.jpeg/' *.jpg
    • \.:匹配 字符本身,而不是正则里的任意字符。
    • 表示“字符串的结尾”。
    • 注意:这里不需要 /g,因为文件名后缀只出现一次。
  3. 修改文件名中的字符 将文件名中的 IMG_ 替换为 PHOTO_

    rename 's/IMG_/PHOTO_/g' *.jpg
  4. 删除文件名中的部分内容 删除所有 .jpg 文件名中的 IMG_

    rename 's/IMG_//g' *.jpg
  5. 使用小写/大写转换

    • 将所有文件名转为小写:
      rename 'tr/A-Z/a-z/' *
    • 将所有文件名转为大写:
      rename 'tr/a-z/A-Z/' *
  6. 更复杂的正则表达式IMG_001.jpg 格式的文件重命名为 photo_001.jpg

    rename 's/^IMG_(\d+)\.jpg$/photo_$1.jpg/' *.jpg
    • IMG_:匹配字面量。
    • (\d+):匹配一个或多个数字,并用 捕获起来,成为一个“分组”。
    • \.jpg$:匹配 .jpg 在结尾。
    • photo_$1.jpg$1 代表第一个捕获到的分组(也就是数字部分)。

使用 zsh 的自动补全和参数扩展(macOS 默认 Shell)

从 macOS Catalina 开始,默认的 Shell 已经从 Bash 改为了 Zsh,Zsh 提供了非常方便的命令行自动补全和参数扩展功能,可以简化重命名操作。

示例

假设你想把 my_long_file_name.txt 重命名为 my_short_file.txt

  1. 使用 Tab 键自动补全输入旧文件名,然后按 Ctrl + A 跳到行首。

    mv my_long_file_name.txt<Tab> # 输入到这,然后按 Ctrl+A
  2. 现在光标在行首,输入新文件名,但将旧文件名的一部分拖到新文件名中。

    mv my_long_file_name.txt my_short<Tab>

    当你按 Tab 时,Zsh 会自动补全 my_short_file.txt

  3. 更强大的方式:使用 ^old^new 语法 这是一个历史记录替换的快捷方式,非常适合快速修改上一个命令中的内容。

    # 先执行一个命令,比如创建一个文件
    touch this_is_a_test_file.log
    # 现在想把它重命名为 this_is_a_final_file.log
    # 你可以不用重新输入整个 mv 命令
    mv ^test^final

    这个命令会找到上一个命令中的 test 并替换为 final,然后执行它,等同于:

    mv this_is_a_test_file.log this_is_a_final_file.log

总结与推荐

场景 推荐命令 优点 缺点
单个文件重命名 mv old_name new_name 简单、直接、系统自带 不适合批量操作
少量文件重命名 mv + Tab/Ctrl+A/Zsh 语法 快捷、无需安装 规律性不强时效率低
大量文件有规律重命名 rename 's/.../.../' 功能极其强大、灵活 需要学习正则表达式,需安装(通过 Homebrew)

快速建议:

  • 重命名一两个文件? 直接用 mv
  • 要给几十个照片统一改名? 花五分钟装一下 brew install rename,然后用 prename (或 rename),会节省你大量的时间。
分享:
扫描分享到社交APP
上一篇
下一篇