[Linux]Linux文件重命名操作详解:mv与rename命令对比
2026/7/18 4:51:49 网站建设 项目流程

在Linux系统中,重命名文件主要通过两种命令实现:mv适用于单个文件或目录的重命名,rename支持批量处理。本文从语法、参数、使用场景及底层原理角度,对二者进行系统说明。


一、基础命令:mv

1.1 基本语法

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

1.2 使用示例

场景命令
重命名当前目录下的文件mv old.txt new.txt
重命名其他路径的文件(同时移动位置)mv /home/user/old.txt /home/user/new.txt

1.3 常用选项

选项含义
-i交互模式:若目标文件已存在,提示用户是否覆盖
-f强制模式:直接覆盖,不提示
-n不覆盖已存在的目标文件
-v显示执行过程详细信息

1.4 注意事项

  • mv同时承担文件移动和重命名两种功能。当源路径与目标路径相同时,行为为重命名;路径不同时,行为为移动文件并重命名。
  • 默认情况下,若目标文件名已存在,mv会直接覆盖而不提示,建议在关键操作中使用-i选项。

二、批量重命名命令:rename

2.1 安装方法

发行版安装命令
Debian/Ubuntu/银河麒麟sudo apt install rename
CentOS/RHELsudo yum install prename

2.2 基本语法

rename's/原字符串/新字符串/'匹配文件模式

该命令使用Perl正则表达式进行替换操作。

2.3 使用示例

需求命令
将所有.txt文件改为.mdrename 's/\.txt$/.md/' *.txt
将所有文件名中的test替换为demorename 's/test/demo/' *
将所有文件名中的空格替换为下划线rename 's/ /_/g' *
将大写扩展名统一转为小写rename 's/\.JPG$/.jpg/' *.JPG

2.4 注意事项

  • 通配符*表示匹配当前目录下所有文件,可使用更具体的模式(如*.txt)缩小范围。
  • 正则表达式中的特殊字符需转义,如.需写作\.$表示行尾。
  • rename命令存在多个变体(Perl版和util-linux版),语法有差异。上述示例基于Perl版(Debian系默认),CentOS安装的prename同样适用该语法。

三、mv与rename对比

对比维度mvrename
适用场景单文件或少量文件重命名批量重命名、格式转换
正则支持不支持支持(Perl正则)
交互确认支持(-i)不支持(需谨慎匹配)
是否可移动位置是(路径不同时)否(仅修改文件名)
内置性所有Linux系统内置需额外安装

四、批量重命名脚本模板

以下脚本可将当前目录下所有.txt文件重命名为带日期前缀的形式,避免覆盖:

#!/bin/bash# 批量重命名:为所有txt文件添加当前日期前缀prefix=$(date+%Y%m%d)forfilein*.txt;domv-i"$file""${prefix}_${file}"done

执行

chmod+x rename_script.sh ./rename_script.sh

五、底层原理简述

  • mv:系统调用rename()link()+unlink()实现。若源与目标在同一文件系统,仅修改目录项(dentry);若跨文件系统,则执行复制后删除源文件。
  • rename:Perl脚本封装了正则替换逻辑,实质仍调用mv或系统rename()完成每个文件的重命名操作。

六、常见问题

  1. mv时目标文件已存在是否可恢复?
    覆盖后无法恢复,建议先备份或使用-i确认。

  2. rename修改后如何预览效果?
    执行时加上-n参数(试运行模式),仅显示修改结果而不实际执行:

    rename-n's/\.txt$/.md/'*.txt
  3. 文件名含空格或特殊字符如何处理?
    mvrename均支持,但需对文件名加引号(如mv "my file.txt" newfile.txt);使用rename时通配符*正常工作。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询