Linux mv 命令超详细教程
mv = move ,核心两大功能:移动文件/目录 、重命名文件/目录,是 Linux 最常用命令之一。
一、基本语法
bash
mv [选项] 源文件/源目录 目标文件/目标目录
- 源:要移动/改名的文件/文件夹
- 目标 :
- 目标不存在 → 重命名
- 目标是目录 → 把源移入该目录
- 目标是已存在文件 → 默认直接覆盖
二、常用选项(参数)
| 选项 | 作用 |
|---|---|
-f |
强制覆盖,不提示(force) |
-i |
覆盖前交互式询问(默认很多系统已别名开启) |
-n |
不覆盖已存在文件(no clobber) |
-v |
显示详细执行过程(verbose) |
-u |
仅移动更新的文件(源比目标新/目标不存在才移动) |
三、实战用法(分场景)
1. 重命名(最基础)
1.1 重命名单个文件
bash
# 把 old.txt 改名为 new.txt
mv old.txt new.txt
1.2 重命名目录
bash
# 把 dir1 改名为 dir2
mv dir1 dir2
2. 移动文件/目录
2.1 移动单个文件到目标目录
bash
# 将 a.txt 移动到 /home/test 目录
mv a.txt /home/test/
2.2 移动整个目录(连同内部所有文件)
mv 移动目录无需加 -r (和 cp/rm 不同)
bash
# 把 dirA 整个移入 dirB 中
mv dirA dirB/
2.3 移动多个文件/通配符批量移动
bash
# 移动 a.txt b.log c.jpg 到 target 目录
mv a.txt b.log c.jpg target/
# 批量移动所有 .txt 文件
mv *.txt target/
3. 覆盖相关场景(重点)
3.1 覆盖前提示(-i)
防止误删,绝大多数 Linux 系统默认把 mv 别名成 mv -i
bash
mv -i old.txt exist.txt
# 提示:mv: 是否覆盖 'exist.txt'? 输入 y 确认,n 取消
3.2 强制覆盖(-f,不弹窗)
脚本/批量操作常用
bash
mv -f old.txt exist.txt
3.3 不覆盖已有文件(-n)
安全批量移动,跳过重名文件
bash
mv -n *.log dir/
3.4 只移动更新的文件(-u)
源文件修改时间更新,才覆盖目标
bash
mv -u a.txt dir/
4. 查看执行过程(-v 详细模式)
适合批量操作,看清每个文件去向
bash
mv -v *.txt ./bak/
5. 特殊路径用法
5.1 移动到上级目录
bash
# 把当前目录的 test.txt 移到上一级
mv test.txt ../
5.2 移动到当前用户家目录
bash
mv file.txt ~/
5.3 绝对路径 / 相对路径混用
bash
# 相对源 + 绝对目标
mv ./data.log /opt/service/log/
四、典型易错点 & 避坑
坑1:目标是文件夹 vs 文件 区别
mv file dir- 如果
dir是目录 :file移入dir
- 如果
mv file1 file2- 如果
file2不存在:file1 改名为 file2 - 如果
file2已存在:直接覆盖 file2
- 如果
坑2:移动目录不要加 -r
mv dir1 dir2/ ✅ 正确
mv -r dir1 dir2/ ❌ 多余参数,不报错但没必要
坑3、跨分区移动 = 复制+删除
- 同分区:mv 只是修改文件指针(极快)
- 不同分区:先复制全部内容,再删除原文件(速度慢)
坑4、隐藏文件(.开头)批量移动
bash
# 移动当前所有隐藏文件到目标目录
mv .[^.]* target/
五、组合示例(常用组合命令)
- 批量移动+详细输出+不覆盖
bash
mv -vn *.jpg ./images/
- 强制批量覆盖(脚本专用)
bash
mv -f *.conf /etc/nginx/conf.d/
- 移动并改名一步完成
bash
# 把 a.txt 移到 /tmp 并改名为 b.txt
mv a.txt /tmp/b.txt
六、补充:取消 mv 别名(临时关闭交互提示)
很多系统默认 alias mv='mv -i',不想每次弹窗可以:
bash
# 临时执行一次不询问
\mv old.txt exist.txt