文件和目录管理命令 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
命令代替。