mv 移动和重命名文件

作用

在 Linux 系统中,mv(move)命令可用于对文件、目录的重命名以及移动操作。系统会根据参数的类型,自动判断是移动还是重名名操作。

语法

mv [参数] [源文件或目录] [目标目录或目标文件]

参数

  • -b或--backup  若需覆盖文件,则覆盖前先行备份。 

  • -f或--force  若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文 件或目录。 

  • -i或--interactive  覆盖前先行询问用户。 

  • -S<附加字尾>或--suffix=<附加字尾>  与-b参数一并使用,可指定备份文件的所要附加的字尾。 

  • -u或--update  在移动或更改文件名时,若目标文件已存在,且其文件日期比源文件新,则不覆盖目标文件。 

  • -v或--verbose  执行时显示详细的信息。 

  • -V=<方法>或--version-control=<方法>  与-b参数一并使用,可指定备份的方法。 

  • --help  显示帮助。 

  • --version  显示版本信息。

示例

(1)把当前目录下的 README.txt 文件移动到 /home/hxstrive/Desktop/bak 目录,并且重名为 README-BAK.txt 文件。要实现移动和重命名文件,需要以绝对路径指定目标文件,目标文件名的父目录为移动目的地,绝对路径中最后的文件名为新的文件名。为了防止覆盖目标目录下的同名文件,需要使用 -i 选项(覆盖前提示用户,避免误操作覆盖重要文件)。命令如下:

# 移动且重命名文件
hxstrive@course:~/Desktop$ mv -i README.txt /home/hxstrive/Desktop/bak/README-BAK.txt
# 查看移动是否成功
hxstrive@course:~/Desktop$ ll /home/hxstrive/Desktop/bak/
total 12
drwxrwxr-x 2 hxstrive hxstrive 4096  6月 26 14:48 ./
drwxr-xr-x 3 hxstrive hxstrive 4096  6月 26 14:48 ../
-rw-rw-r-- 1 hxstrive hxstrive   12  6月 26 14:47 README-BAK.txt

注意:要把文件移动到目标目录下,必须对该目录具有写权限。

(2)移动整个目录到指定的目标目录。命令如下:

# 查看 nginx 目录下面有哪些文件和目录
hxstrive@course:~/tmp$ ls nginx-1.20.2
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  README  src

# 将 nginx 目录移动到 bak 目录
hxstrive@course:~/tmp$ mv nginx-1.20.2 bak/

# 查看当前目录,nginx 目录已经不存在
hxstrive@course:~/tmp$ ls
bak  nginx-1.20.2.tar.gz

# 查看 bak 目录,nginx 目录已经移动到 bak 目录
hxstrive@course:~/tmp$ ls bak/
nginx-1.20.2

# 查看 bak 目录中的 nginx 目录
hxstrive@course:~/tmp$ ls bak/nginx-1.20.2/
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  README  src

(3)使用 mv 命令对文件进行重命名,命令如下:

# 将 nginx-1.20.2.tar.gz 文件重命名为 nginx.tar.gz
hxstrive@course:~/tmp$ mv nginx-1.20.2.tar.gz nginx.tar.gz
# 查看重命名后的效果
hxstrive@course:~/tmp$ ls
bak  nginx.tar.gz

(4)使用 mv 命令的 -b 和 -i 选项实现在移动文件时,如果目标存在该文件,则询问用户是否覆盖。在要覆盖文件时,给文件创建一个备份。命令如下:

# 查看目标目录,存在 nginx.tar.gz 文件
hxstrive@course:~/tmp$ ls bak/
nginx.tar.gz

# 查看当前目录,也存在 nginx.tar.gz 文件
hxstrive@course:~/tmp$ ls
bak  nginx.tar.gz

# 将当前目录下面的 nginx.tar.gz 移动到 bak 目录
hxstrive@course:~/tmp$ mv -bi nginx.tar.gz bak/
mv: overwrite 'bak/nginx.tar.gz'? y

# 查看执行移动后 bak 目录的内容,多出了一个 nginx.tar.gz~ 文件,该文件就是备份文件
hxstrive@course:~/tmp$ ls bak/
nginx.tar.gz  nginx.tar.gz~

(5)使用 mv 命令的 -S 选项指定覆盖文件时创建的备份文件的后缀(默认为 ~),命令如下:

# 确认 nginx.tar.gz 文件和 bak 目录
hxstrive@course:~/tmp$ ls
bak  nginx.tar.gz
hxstrive@course:~/tmp$ ls bak/
nginx.tar.gz

# 移动文件 nginx.tar.gz 到 bak 目录
hxstrive@course:~/tmp$ mv -ibS.bak nginx.tar.gz bak/
mv: overwrite 'bak/nginx.tar.gz'? y

# 查看移动后 bak 目录的内容,多出了一个备份文件 nginx.tar.gz.bak
hxstrive@course:~/tmp$ ls bak/
nginx.tar.gz  nginx.tar.gz.bak

更多关于命令详细参考手册,请使用 man 命令或者 --help 参数获取帮助信息

关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号