Linux 【08-mv命令超详细教程】

Linux mv 命令超详细教程

mv = move ,核心两大功能:移动文件/目录 、重命名文件/目录,是 Linux 最常用命令之一。

一、基本语法

bash 复制代码
mv [选项] 源文件/源目录 目标文件/目标目录
  • 源:要移动/改名的文件/文件夹
  • 目标 :
    1. 目标不存在 → 重命名
    2. 目标是目录 → 把源移入该目录
    3. 目标是已存在文件 → 默认直接覆盖

二、常用选项(参数)

选项 作用
-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 文件 区别

  1. mv file dir
    • 如果 dir 是目录 :file 移入 dir
  2. mv file1 file2
    • 如果 file2 不存在:file1 改名为 file2
    • 如果 file2 已存在:直接覆盖 file2

坑2:移动目录不要加 -r

mv dir1 dir2/ ✅ 正确

mv -r dir1 dir2/ ❌ 多余参数,不报错但没必要

坑3、跨分区移动 = 复制+删除

  • 同分区:mv 只是修改文件指针(极快)
  • 不同分区:先复制全部内容,再删除原文件(速度慢)

坑4、隐藏文件(.开头)批量移动

bash 复制代码
# 移动当前所有隐藏文件到目标目录
mv .[^.]* target/

五、组合示例(常用组合命令)

  1. 批量移动+详细输出+不覆盖
bash 复制代码
mv -vn *.jpg ./images/
  1. 强制批量覆盖(脚本专用)
bash 复制代码
mv -f *.conf /etc/nginx/conf.d/
  1. 移动并改名一步完成
bash 复制代码
# 把 a.txt 移到 /tmp 并改名为 b.txt
mv a.txt /tmp/b.txt

六、补充:取消 mv 别名(临时关闭交互提示)

很多系统默认 alias mv='mv -i',不想每次弹窗可以:

bash 复制代码
# 临时执行一次不询问
\mv old.txt exist.txt
相关推荐
Allocator12 小时前
彻底解决ubuntu上腾讯会议无法共享问题
linux·ubuntu·腾讯会议
程序员-Benothing12 小时前
Linux编码转换命令:iconv、dos2unix、base64、md5sum
linux·运维·服务器
重生之小比特12 小时前
【Linux系统】06 进程概念
linux
2402_8828938613 小时前
Linux 进程概念详解(上)—— 从冯诺依曼体系到僵尸进程与孤儿进程
linux·运维·服务器
qetfw13 小时前
Debian iptables 防火墙:默认拒绝、SNAT 与 DNAT 验证
linux·服务器·debian·php
忆挽篱笙歌13 小时前
冯诺依曼+操作系统+进程
linux·ubuntu
Apipi*14 小时前
30天速通Linux 第九章Linux网络编程
linux·运维·网络
报错小能手14 小时前
Channel面试题。Sync面试题
linux·服务器·windows
xiaoqiMikko14 小时前
Linux 实战(五):DNS、hosts、CLOSE-WAIT、SSH 权限与改端口 —— 三台真机实测
linux·centos
Linux-lucky15 小时前
43-Linux学习之旅之Shell 脚本(二)
linux·运维·学习·ubuntu·dash