名称

mv - 移动(重命名)文件

简介

mv [选项]... 源文件 目标文件
mv [选项]... 源文件... 目标目录

描述

mv 命令将文件或目录从一个位置移动到另一个位置。如果最后一个参数是一个已存在的目录,mv 会将所有指定的源文件或目录移动到该目录中(保持原名)。如果最后参数不是目录且只指定了两个文件,则会将源文件重命名为目标文件(可能覆盖已有文件)。

该命令主要用于:

  • 重命名文件或目录。

  • 将文件或目录移动到另一个目录下。

  • 批量移动多个文件到目标目录。

选项

短选项

长选项

描述

-i

--interactive

交互模式:若目标文件存在,覆盖前提示确认。

-f

--force

强制覆盖:若目标文件无法打开则删除并重试,不提示(覆盖 -i)。

-n

--no-clobber

不覆盖已存在的文件(如果目标已存在,则不执行移动)。

-u

--update

只在源文件比目标文件新或目标文件缺失时才移动。

-v

--verbose

显示详细的操作信息,列出每个被移动的文件。

-b

--backup[=CONTROL]

对每个已存在的目标文件进行备份(而非覆盖)。可指定备份方式(如 simplenumberedexistingnone),默认方式由环境变量 VERSION_CONTROL 决定。

-S

--suffix=后缀

指定备份文件的后缀,默认为 ~

-t

--target-directory=目录

将所有源文件移动到指定目录,常用于配合 xargs 等命令。

-T

--no-target-directory

将目标视为普通文件,而不是目录(即使最后一个参数是目录名,也执行重命名而非移动)。

--help

显示帮助信息并退出。

--version

显示版本信息并退出。

退出状态

  • 0 – 所有移动操作成功。

  • >0 – 发生错误(例如源文件不存在、目标目录无法写入、权限不足等)。

常用示例

1. 重命名文件

mv oldname.txt newname.txt

2. 移动文件到目录

mv file.txt /home/user/docs/

3. 移动多个文件到目录

mv file1.txt file2.jpg /target/directory/

4. 移动目录

mv mydir /new/location/

5. 交互式移动(覆盖前询问)

mv -i source.txt dest.txt

6. 强制覆盖(不询问)

mv -f source.txt dest.txt

7. 仅在源文件更新时移动

mv -u source.txt dest.txt

8. 不覆盖已存在的目标文件

mv -n source.txt dest.txt

9. 移动时显示详细信息

mv -v *.log logs/

10. 移动文件并为可能覆盖的目标创建备份

mv -b document.txt archive/

这会在 archive/ 中若存在 document.txt 则将其重命名为 document.txt~,再将源文件移入。

11. 指定备份后缀

mv -b -S ".bak" file.txt backup/

12. 使用 -t 指定目标目录(便于与 findxargs 配合)

find . -name "*.tmp" -exec mv -t /tmp/ {} +

将所有 .tmp 文件移动到 /tmp 目录。

13. 将文件重命名为目标文件,即使目标是一个目录也当作文件(不放入目录)

mv -T file.txt existing_dir

如果 existing_dir 已存在且是目录,此命令将尝试把 file.txt 重命名为 existing_dir(而不是移入其中),如果 existing_dir 已存在且是普通文件,则会覆盖。

注意事项

  • 移动操作在同一文件系统内是快速的(仅修改目录项),跨文件系统时实际会执行复制+删除,耗时且占用空间。

  • 使用 -i-n 可以避免意外覆盖重要文件。在脚本中建议使用 -n-u 以增加安全性。

  • 如果目标文件存在且无写权限,mv 会提示是否覆盖(即使没有 -i),除非使用 -f 强制覆盖。

  • 使用 -b 备份时,备份文件默认后缀为 ~,可通过 -S 修改。

  • 当使用通配符移动文件时,建议先 echo 确认匹配的文件列表,避免误操作。

  • 移动目录时,若目标目录已存在,源目录会被移动到目标目录内部(成为其子目录)。若目标目录不存在且父目录存在,则源目录会被重命名为目标目录名。

  • mv 操作可能改变文件的 inode 编号(跨设备移动时),但权限、时间戳等元数据通常会保留。

相关命令

  • cp – 复制文件或目录。

  • rm – 删除文件或目录。

  • rename – 批量重命名文件(支持 Perl 正则表达式)。

  • install – 复制文件并设置属性,常用于安装程序。

  • ln – 创建硬链接或符号链接。