Skip to main content

Linux 核心命令

文件和目录管理命令 mv

mv 命令是 Linux 中用来移动或重命名文件和目录的工具,全称是 move。它简单好用,但功能强大,日常操作中经常会用到。

1. 基本语法

mv 的基本格式是:

mv [选项] 源文件 目标文件
  • 源文件:你要移动或重命名的文件或目录。
  • 目标文件:新的文件名或目标路径。
  • 选项:控制 mv 行为的参数,比如是否覆盖、是否提示等。

2. 重命名文件

最简单的用法是用 mv 给文件或目录改名。比如你有一个文件叫 oldname.txt,想改成 newname.txt

mv oldname.txt newname.txt
  • 这会把 oldname.txt 改名为 newname.txt,文件内容不变,只是名字变了。
  • 如果当前目录已经有 newname.txt,默认会直接覆盖(小心!!!)。

目录也可以重命名,操作一样:

mv olddir newdir

3. 移动文件到另一个目录

除了改名,mv 还能把文件或目录移动到别的路径。比如把 file.txt 移动到 /home/user/docs/

mv file.txt /home/user/docs/
  • 如果目标目录不存在,会报错。
  • 如果目标目录已经有一个同名文件,默认也会覆盖同名文件。

可以一次移动多个文件到同一个目录:

mv file1.txt file2.txt /home/user/docs/

4. 移动并重命名

你还能在移动的同时改名。比如把 file.txt 移动到 /home/user/docs/ 并改名为 newfile.txt

mv file.txt /home/user/docs/newfile.txt

5. 处理覆盖问题

默认情况下,如果目标位置有同名文件,mv 会直接覆盖,不会有任何提示。为了更安全,可以用以下选项:

-i 交互模式

加上 -i(interactive),每次覆盖前都会提示你:

mv -i file.txt /home/user/docs/

如果 /home/user/docs/file.txt 已存在,终端会问:

mv: overwrite '/home/user/docs/file.txt'? 

输入 y 确认覆盖,输入 n 取消。

-n 禁止覆盖

-n(no-clobber),如果目标文件存在,mv 不会覆盖,直接跳过:

mv -n file.txt /home/user/docs/

这个选项适合不想误删文件的场景。

6. 强制覆盖

反过来,如果你确定要覆盖,不想被提示,可以用 -f(force):

mv -f file.txt /home/user/docs/

即使目标有同名文件,也会直接覆盖,不会有任何提示。

7. 备份已有文件

如果想在覆盖前备份目标文件,可以用 -b

mv -b file.txt /home/user/docs/
  • 如果 /home/user/docs/file.txt 已存在,mv 会把原来的文件改名为 file.txt~(加个波浪号后缀),然后再移动。
  • 备份后缀默认是 ~,可以用 --suffix 自定义:
mv -b --suffix=.bak file.txt /home/user/docs/

这会把原文件备份为 file.txt.bak

8. 更新模式

-u(update),mv 只会在源文件比目标文件新,或者目标文件不存在时才移动:

mv -u file.txt /home/user/docs/

这个选项适合只想更新较新文件的场景,比如同步文件时。

9. 显示详细信息

想知道 mv 干了啥,可以用 -v(verbose),它会打印每一步操作:

mv -v file1.txt file2.txt /home/user/docs/

输出可能像这样:

'file1.txt' -> '/home/user/docs/file1.txt'
'file2.txt' -> '/home/user/docs/file2.txt'

10. 移动目录

mv 也可以移动整个目录,包括目录里的所有内容。比如把 mydir 移动到 /home/user/backup/

mv mydir /home/user/backup/
  • 如果目标目录存在,mydir 会被移动到目标目录下(变成子目录)。
  • 如果目标目录不存在,mydir 会被重命名为目标目录名。

11. 处理特殊文件名

如果文件名有空格、特殊字符(比如 *?),可以用引号或反斜杠转义:

mv "file with spaces.txt" "new name.txt"

或者:

mv file\ with\ spaces.txt new\ name.txt

12. 结合通配符

mv 支持通配符,比如移动所有 .txt 文件到某个目录:

mv *.txt /home/user/docs/
  • * 匹配任意字符,? 匹配单个字符。
  • 要小心通配符匹配到不想移动的文件,建议先用 ls *.txt 检查。

13. 错误处理

  • 如果目标路径不存在,mv 会报错:
mv file.txt /nonexistent/path/

输出:

mv: cannot move 'file.txt' to '/nonexistent/path/file.txt': No such file or directory

14. 权限问题

如果没有权限,mv 会失败:

mv file.txt /root/

可能输出:

mv: cannot move 'file.txt' to '/root/file.txt': Permission denied

可以用 sudo 提升权限(如果有权限):

sudo mv file.txt /root/

15. 跨分区移动

如果移动文件到不同分区(比如从硬盘到 U 盘),mv 会先复制再删除源文件,速度可能较慢。如果只想复制,可以用 cp 命令代替。