mv 是 "move"(移动)的缩写,但它有两个主要功能:

- 移动文件或目录:从一个位置移动到另一个位置。
- 重命名文件或目录:在同一目录下,移动操作本质上就是重命名。
基本语法
mv 命令的基本语法非常简单:
mv [选项] 源文件 目标位置
[选项]:用于控制mv命令的行为,-i,-f,-v等。源文件:你想要移动或重命名的文件或目录。目标位置:文件或目录要移动到的路径,或者新的名称。
核心功能详解
重命名文件/目录
当源文件和目标位置在同一个目录下时,mv 命令就是重命名操作。
示例:
将 old_name.txt 重命名为 new_name.txt。
touch old_name.txt # 先创建一个文件作为示例 ls # 输出: old_name.txt mv old_name.txt new_name.txt ls # 输出: new_name.txt
原理:mv 实际上是改变了文件在文件系统中的索引节点(inode)的名称,所以速度非常快。

移动文件/目录
当目标位置是一个已存在的目录时,mv 命令会将源文件或目录移动到该目录中。
示例 1:移动文件到目录
将 report.txt 移动到 documents 目录中。
mkdir documents touch report.txt mv report.txt documents/ ls # 输出: documents ls documents/ # 输出: report.txt
示例 2:移动目录到另一个目录
将 source_dir 目录移动到 parent_dir 目录中。
mkdir parent_dir source_dir mv source_dir parent_dir/ ls parent_dir/ # 输出: source_dir
示例 3:移动多个文件到目录
将 file1.txt, file2.txt, 和 file3.txt 全部移动到 archive 目录中。

mkdir archive touch file1.txt file2.txt file3.txt mv file1.txt file2.txt file3.txt archive/ ls archive/ # 输出: file1.txt file2.txt file3.txt
常用选项
掌握这些选项能让 mv 命令更安全、更强大。
| 选项 | 全称 | 描述 | 示例 |
|---|---|---|---|
-i |
--interactive | 交互式,如果目标文件已存在,会先询问用户是否覆盖(y/n)。强烈推荐使用! | mv -i old.txt new.txt |
-f |
--force | 强制,如果目标文件已存在,会直接覆盖,且不进行任何提示,忽略 -i 选项。 |
mv -f old.txt new.txt |
-v |
--verbose | 详细模式,显示 mv 命令的执行过程,即移动了哪些文件。 |
mv -v file.txt documents/ |
-n |
--no-clobber | 不覆盖,如果目标文件已存在,则不覆盖它,并且不进行提示。 | mv -n existing.txt new.txt |
--backup |
-- | 备份,在覆盖前,对已存在的目标文件进行备份。 | mv --backup -f source.txt target.txt |
-u |
--update | 更新,只有当源文件比目标文件新,或者目标文件不存在时,才进行移动或覆盖操作。 | mv -u source.txt target.txt |
重要注意事项与最佳实践
覆盖风险
mv 命令默认会静默地覆盖目标文件,而不会产生任何警告,如果你不小心用同名文件覆盖了一个重要文件,数据可能会丢失。
解决方案:
- 使用
-i选项:这是最常用也是最有效的安全措施。# target.txt 已存在,会提示 "overwrite 'target.txt'? (y/n)" mv -i source.txt target.txt
- 使用
alias:你可以将mv命令默认设置为-i模式,这样每次使用mv都会自动询问。# 在你的 shell 配置文件中(如 ~/.bashrc, ~/.zshrc)添加下面这行 alias mv='mv -i' # 然后重新加载配置文件 source ~/.bashrc
无论你是否加
-i,mv都会进行交互式询问。
移动目录 vs 复制目录
mv dir1 dir2:移动dir1目录到dir2目录下。dir1的内容会变成dir2/dir1。dir1原目录被清空。cp -r dir1 dir2:复制dir1目录到dir2目录下。dir1的内容会变成dir2/dir1。dir1原目录保持不变。
移动到根目录
如果你想移动文件到根目录 ,需要确保你有足够的权限,并且非常小心,错误的操作可能会破坏系统。
综合示例
假设我们有以下文件结构:
.
├── project/
│ ├── main.c
│ └── notes.txt
├── data/
│ └── raw_data.csv
└── temp_file.log
任务1:将 notes.txt 重命名为 README.md
mv project/notes.txt project/README.md
结果:project/notes.txt 变成了 project/README.md。
任务2:将 main.c 移动到 data 目录
mv project/main.c data/
结果:project/main.c 被移动,现在位于 data/main.c。
任务3:将整个 project 目录移动到 data 目录
mv project/ data/
结果:data 目录下现在多了一个 data/project/ 目录。
任务4:将 temp_file.log 移动到 data 目录,并重命名为 processed.log
mv temp_file.log data/processed.log
结果:temp_file.log 消失,data/processed.log 被创建。
任务5:使用 -v 选项查看移动过程
mv -v data/raw_data.csv . # 输出: 'data/raw_data.csv' -> './raw_data.csv'
结果:文件被移动,并且终端显示了移动的详细信息。
mv 命令是日常 Linux/Unix 操作中不可或缺的工具,记住它的两个核心功能(移动和重命名),并养成使用 -i 选项(或设置 alias)的好习惯,可以让你在操作文件时更加安全和高效,对于更复杂的批量重命名任务,可以考虑使用 rename 命令。
