[Linux]Linux文件重命名操作详解:mv与rename命令对比
在Linux系统中重命名文件主要通过两种命令实现mv适用于单个文件或目录的重命名rename支持批量处理。本文从语法、参数、使用场景及底层原理角度对二者进行系统说明。一、基础命令mv1.1 基本语法mv[选项]源文件 目标文件1.2 使用示例场景命令重命名当前目录下的文件mv old.txt new.txt重命名其他路径的文件同时移动位置mv /home/user/old.txt /home/user/new.txt1.3 常用选项选项含义-i交互模式若目标文件已存在提示用户是否覆盖-f强制模式直接覆盖不提示-n不覆盖已存在的目标文件-v显示执行过程详细信息1.4 注意事项mv同时承担文件移动和重命名两种功能。当源路径与目标路径相同时行为为重命名路径不同时行为为移动文件并重命名。默认情况下若目标文件名已存在mv会直接覆盖而不提示建议在关键操作中使用-i选项。二、批量重命名命令rename2.1 安装方法发行版安装命令Debian/Ubuntu/银河麒麟sudo apt install renameCentOS/RHELsudo yum install prename2.2 基本语法renames/原字符串/新字符串/匹配文件模式该命令使用Perl正则表达式进行替换操作。2.3 使用示例需求命令将所有.txt文件改为.mdrename s/\.txt$/.md/ *.txt将所有文件名中的test替换为demorename s/test/demo/ *将所有文件名中的空格替换为下划线rename s/ /_/g *将大写扩展名统一转为小写rename s/\.JPG$/.jpg/ *.JPG2.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执行chmodx rename_script.sh ./rename_script.sh五、底层原理简述mv系统调用rename()或link()unlink()实现。若源与目标在同一文件系统仅修改目录项dentry若跨文件系统则执行复制后删除源文件。renamePerl脚本封装了正则替换逻辑实质仍调用mv或系统rename()完成每个文件的重命名操作。六、常见问题mv时目标文件已存在是否可恢复覆盖后无法恢复建议先备份或使用-i确认。rename修改后如何预览效果执行时加上-n参数试运行模式仅显示修改结果而不实际执行rename-ns/\.txt$/.md/*.txt文件名含空格或特殊字符如何处理mv和rename均支持但需对文件名加引号如mv my file.txt newfile.txt使用rename时通配符*正常工作。