菜鸟科技网

Mac修改文件名命令有哪些?

在 macOS 系统中,修改文件名是日常操作中常见的需求,无论是为了整理文件、规范命名还是修正错误,掌握高效的命令行方法都能提升工作效率,虽然 macOS 提供了图形界面的重命名功能,但通过终端(Terminal)使用命令行操作,可以实现批量处理、精确控制和自动化脚本编写,尤其适合处理大量文件或复杂命名场景,以下是几种常用的 macOS 修改文件名的命令及详细操作方法。

Mac修改文件名命令有哪些?-图1
(图片来源网络,侵删)

基础命令:mv(移动/重命名)

mv 命令是 Linux 和 macOS 系统中最基础的重命名工具,其核心功能是“移动文件”,但当源文件和目标文件在同一目录下时,实际执行的是“重命名”操作,基本语法为:
mv [原文件名] [新文件名]

示例操作:

  1. 重名单个文件
    若要将文件 report.txt 修改为 annual_report.txt,在终端中输入:

    mv report.txt annual_report.txt

    执行后,原文件名 report.txt 将被替换为 annual_report.txt

  2. 重命名时覆盖提示
    默认情况下,若目标文件已存在,mv 命令会直接覆盖且无提示,为避免误操作,可添加 -i 参数(interactive),覆盖前会询问确认:

    Mac修改文件名命令有哪些?-图2
    (图片来源网络,侵删)
    mv -i report.txt annual_report.txt

    annual_report.txt 已存在,终端会提示 overwrite annual_report.txt? (y/n),输入 y 确认覆盖。

  3. 强制覆盖(无提示)
    若需强制覆盖且不希望看到提示,可使用 -f 参数(force):

    mv -f report.txt annual_report.txt

批量重命名:rename 命令

mv 命令适合单文件重命名,但批量处理时效率较低,macOS 默认安装了 Perl 版本的 rename 命令(部分系统可能需要手动安装,通过 brew install rename),支持正则表达式,功能强大,基本语法为:
rename [选项] '正则表达式' 文件名

示例操作:

  1. 批量替换文件名中的关键词
    若将当前目录下所有 test_ 开头的文件修改为 sample_test_1.txtsample_1.txt

    Mac修改文件名命令有哪些?-图3
    (图片来源网络,侵删)
    rename 's/test_/sample_/' *

    s/原字符串/新字符串/ 是正则替换语法, 表示匹配所有文件。

  2. 批量修改文件扩展名
    将所有 .log 文件修改为 .txt

    rename 's/\.log$/\.txt/' *

    \.log$ 表示以 .log 结尾的字符串, 是正则表达式中的结尾锚点。

  3. 批量添加前缀或后缀
    为所有 .jpg 文件添加前缀 photo_

    rename 's/^/photo_/' *.jpg

    ^ 表示字符串开头,s/^/photo_/ 表示在开头添加 photo_
    为所有文件添加后缀 _backup

    rename 's/_backup$//' *  # 先移除旧后缀(若有)
    rename 's/$/_backup/' *

高级批量重命名:mmv 命令

mmv(move/mass rename)是一个更专业的批量重命名工具,默认未安装,可通过 Homebrew 安装:brew install mmv,其语法更直观,支持通配符匹配,基本语法为:
mmv [源模式] [目标模式]

示例操作:

  1. 批量替换文件名中的部分字符
    将所有 file_1.txtfile_2.txt 修改为 data_1.txtdata_2.txt

    mmv 'file_*.txt' 'data_#1.txt'

    #1 表示源模式中的第一个通配符 匹配的内容,即数字部分。

  2. 批量移动并重命名文件
    source_dir 目录下的所有 .txt 文件移动到 target_dir 并添加前缀 old_

    mmv 'source_dir/*.txt' 'target_dir/old_#1'

使用 find 命令结合 xargswhile 循环

对于更复杂的批量重命名需求(如按修改时间、文件大小等条件筛选后重命名),可结合 find 命令查找文件,再通过 xargswhile 循环执行重命名。

示例操作:

  1. 查找并重命名最近7天内修改的文件

    find . -type f -mtime -7 -exec bash -c 'mv "$1" "${1//old/new}"' _ {} \;

    find . -type f -mtime -7 查找当前目录下7天内修改的文件,-exec 结合 bash -c 执行重命名,${1//old/new} 是字符串替换语法,将文件名中的 old 替换为 new

  2. 通过 while 循环批量重命名

    find . -name '*.tmp' | while read file; do
      mv "$file" "${file%.tmp}.log"
    done

    该命令查找所有 .tmp 文件并将其扩展名修改为 .log${file%.tmp} 是参数扩展,表示移除文件名末尾的 .tmp

注意事项

  1. 备份重要文件:批量重命名前建议先备份文件,避免因正则表达式错误导致文件丢失。
  2. 测试正则表达式:复杂正则表达式可在小范围文件上测试,确认逻辑无误后再批量执行。
  3. 权限问题:确保对目标文件有读写权限,否则 mvrename 命令会报错。

相关问答FAQs

Q1: 使用 rename 命令时,如何只修改文件名中的特定部分而不影响扩展名?
A1: 可通过正则表达式锚点精确匹配文件名部分,仅修改文件名中 versionver,保留扩展名:

rename 's/(.*)version(.*)/$1ver$2/' *

该命令中 匹配任意字符(非贪婪模式),version 是待替换的关键词,$1$2 分别表示前后匹配的分组,确保扩展名不受影响。

Q2: 如何在 macOS 中为批量重命名命令创建别名(alias),方便后续使用?
A2: 可通过编辑 ~/.zshrc(若使用 Zsh shell)或 ~/.bash_profile(若使用 Bash shell)文件创建别名,为 rename 's/test_/sample_/' 创建别名 batch_rename_test

echo 'alias batch_rename_test="rename \"s/test_/sample_/\" *"' >> ~/.zshrc
source ~/.zshrc

之后直接输入 batch_rename_test 即可执行批量重命名,注意别名中的引号需转义,避免与 shell 语法冲突。

分享:
扫描分享到社交APP
上一篇
下一篇