首页 > Sysadmin > 正文

Linux 文件重命名完全指南

huyuanwen 2026-11-03 Sysadmin

mv 处理单文件改名,rename.ul 擅长批量子串替换;以下均经 WSL2 实测。

一、TL;DR:按场景选工具

  • 单文件/目录改名:mv old new,最简单也最通用。
  • 批量改后缀或统一前缀:rename.ul old new *,子串替换一次搞定。
  • 怕误覆盖:mv -n 或 rename.ul --no-overwrite,不碰已有目标。
  • 批量改名前先确认:rename.ul -n old new *,空跑看效果。

二、mv:单文件与目录

mv old.txt new.txt
mv -n old.txt new.txt
mv -f old.txt new.txt
mv -i old.txt new.txt
mv dir_a dir_b

mv 是 GNU coreutils 的默认工具,单文件改名和目录重命名都走它 [1]。-f 强制覆盖已有目标,-n 拒绝覆盖,-i 交互确认——三选一,只生效最后一个。目录改名时无需加 -r,直接 mv old_dir new_dir 即可 [3]。

实测记录:

$ mv -n file1.txt newfile.txt
mv: not replacing 'newfile.txt'
$ echo 'n' | mv -i src.txt dst.txt
mv: overwrite 'dst.txt'? 
src.txt 保留,dst.txt 未被覆盖

跨文件系统时 mv 会自动退化为复制+删除,不会报错 [3]。

三、rename.ul:批量子串替换

rename.ul txt bak *.txt
rename.ul -n old new *
rename.ul -a old new *
rename.ul --no-overwrite old new *

rename.ul 属于 util-linux 包,Ubuntu 24.04 上二进制名是 rename.ul(不是 rename),手动装法是 sudo apt install util-linux [2]。它的工作方式是替换文件名中第一次出现的子串;-a 替换全部,-n 只预览不改,--no-overwrite 跳过已有文件。

实用例子:把 .htm 统一改为 .html

rename.ul .htm .html *.htm

四、按场景、权限与版本差异

场景 mv rename.ul
单文件改名 正常 正常
批量后缀统一 需循环 一行搞定
目录重命名 正常 不支持(仅文件)
跨文件系统 自动复制+删除 不适用
怕误覆盖 -n / -i / -f –no-overwrite / -n
Ubuntu < 22.04 默认有 可能叫 rename.ul
容器(无 apt) 默认有 可能缺失

版本兼容注意:--no-overwrite 在 util-linux 2.39+ 才有,旧版 Ubuntu 用 -n 预览代替 [2]。

五、回滚、排错与局限性

排错速查

# rename.ul 不存在时的处理
which rename.ul || sudo apt install util-linux

# 批量改名前先预览
rename.ul -n old new *

# 强制覆盖已有文件
mv -f source.txt dest.txt
现象 原因 处理
rename: command not found 二进制叫 rename.ul 用 rename.ul,或装 prename
mv: not replacing 用了 -n 但目标已存在 加 -f 或先删目标
mv: overwrite 'x'? 卡住 交互模式下等待输入 按 y/n 或加 -f 跳过
批量改名后名称混乱 没有先预览 先用 rename.ul -n 看效果

局限性

  • rename.ul 只改文件名中的子串,不能改路径或目录。
  • Perl 版 rename(prename 包)支持正则表达式,但和 rename.ul 语法不同,注意区分。
  • 批量改名涉及大量 IO 时,跨文件系统 mv 会复制+删除,耗时翻倍。

实测记录

  • 环境:WSL2 Ubuntu 24.04,内核 5.15。
  • mv 系列:基础改名、-n 阻止覆盖、-f 强制覆盖、-i 交互跳过、目录改名均通过。
  • rename.ul:子串替换、-n 预览、-a 全替换、–no-overwrite 均通过。
  • 清理:临时目录 /tmp/rename-test 已删除,WSL 环境无残留。

参考资料

文中主要命令已在 WSL Ubuntu(24.04)实测并核对其在 Debian 系与通用发行版的文档口径。