Linux下重命名目录本质是mv移动操作,非专用rename命令;需注意路径准确性、目标不存在、避免斜杠结尾、不支持通配符批量;rename可批量正则替换但需预装且谨慎使用。

mv 命令重命名目录最直接,但路径写错会丢文件
Linux 下重命名文件夹本质是「移动」操作,用 mv 即可。不是专门的 rename 命令,这点容易误解。
常见错误现象:mv: cannot move 'old' to 'new': No such file or directory —— 很可能是当前路径不对,或源目录名输错了。
- 必须确认当前工作目录(
pwd),或用绝对路径避免歧义,比如mv /home/user/old /home/user/new - 目标路径不能已存在同名目录(除非是空目录),否则
mv会把源目录「移进去」,变成子目录,不是重命名 - 如果目标名带斜杠(如
new/),系统会认为你要往一个目录里移,报错或行为异常 - 不支持通配符批量重命名目录(
mv dir* new*会失败),得用循环或rename工具
rename 命令能批量改名,但默认不装且语法易出错
rename 是 Perl 脚本,功能强但发行版预装情况不一:Ubuntu/Debian 有,CentOS/RHEL 默认没有,得先 sudo yum install prename 或 sudo dnf install perl-rename。
使用场景:一次性把 project_v1、project_v2 全改成 proj_v1、proj_v2 这类模式替换。
- 基本语法是
rename 's/旧模式/新模式/' 目录名*,注意单引号包裹正则,不是双引号 - 别漏掉末尾的
*,否则只处理字面名为「目录名*」的文件(不存在) - 测试时先加
-n参数看预览,比如rename -n 's/^project/proj/' project_* - 它对目录名里的空格、括号等特殊字符敏感,没转义会报错;稳妥起见用
find+rename更可控
遇到权限不足或跨文件系统,mv 会失败而不是静默跳过
mv 重命名目录在同文件系统内是原子操作(快且安全),但若目标路径在另一挂载点(比如从 /home 移到 /mnt/usb),实际是「复制 + 删除」,耗时长且中途失败会导致源目录残留或目标不完整。
- 检查是否跨文件系统:用
df -h .和df -h /目标路径对比输出的文件系统设备名(如/dev/sda1) - 权限问题常表现为
Permission denied,不只是目标目录要可写,父目录也得有写+执行权限(wx),否则无法修改其目录项 - 普通用户不能重命名 root 创建的目录,即使自己是组成员——得用
sudo mv,但要格外小心,输错可能覆盖系统目录
脚本中重命名目录,别硬编码路径,优先用变量和 cd 隔离作用域
自动化任务里直接写 mv old new 看似简单,但一旦脚本在别的目录运行就失效;更糟的是,如果 old 不存在,mv 默认不报错,后续逻辑可能误判成功。
- 用变量存路径:
OLD_DIR="/path/to/old"; NEW_DIR="/path/to/new"; [ -d "$OLD_DIR" ] && mv "$OLD_DIR" "$NEW_DIR" - 进目录再操作更可靠:
cd /parent && mv old new,避免路径拼接错误 - 检查返回值:
if ! mv "$OLD_DIR" "$NEW_DIR" 2>/dev/null; then echo "重命名失败"; exit 1; fi - 别用
~符号传给mv当参数(如mv ~/old ~/new),在非交互 shell 中可能不展开;统一用$HOME
重命名看着简单,真正出问题往往卡在路径解析、权限继承或跨文件系统判断上。特别是写脚本时,少依赖当前路径,多做存在性校验,比事后恢复省力得多。










