点关注公众号,回复“1024”获取2TB学习资源!

众所周知,在 Linux 系统中,一切皆文件!

所以,对于文件的操作与管理在 Linux 系统中显得尤其重要,今天,就给大家介绍一个文件管理命令 mv 。

本文主要讲解 mv 命令的具体用法与实际中应该注意的点,让我们一起通过理论+实例 的形式,一起来研究和学习 mv 命令。

需要学习更多关于 Linux系统命令的读者们,可以参阅往期系列文章《每天学习一个Linux命令》。

mv 简介

mv 命令是 move 的缩写, 也是 Linux 系统下常用的命令之一,mv 命令常常用于移动、重命名文件或目录。或者将文件从一个目录移动到另一个目录中,如果将一个文件移动到一个已经存在的目标文件中,这时目标文件的内容会被此文件内容覆盖。

如果源为文件,而目标为目录,mv 将进行文件的位置移动。如果源为目录,则目标只能是目录(不能为文件),mv 将进行目录的重命令名。

mv 命令移动文件时,在目标不同的情况下,会有下面 4 种不同的结果:

如果目标是指定的某一个具体路径,则源文件会被移动到此目录下,且文件名不变。如果目标不是目录,则源文件名(只能有一个)会变为此目标文件名,如果存在同名文件,则会覆盖己存在的同名文件。如果源文件和目标文件在同一个目录下,mv 的作用就是修改文件名。当目标是目录时,源文件或目录可以是多个,这时所有的源文件都会被移至目标目录下。且所有的文件都将保留以前的文件名。

语法格式

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

mv [options] source destination

选项说明

-b   #当目标文件存在时,覆盖之前创建一个备份

-f   #如果移动的文件或目录与目标重复,则直接覆盖(无需确认)

-i   #交互式操作,覆盖前会提示用户进行确认操作,用户通过输入Y/N来确认是否覆盖

-u   #若目标文件已存在,且与需移动的文件同名,只有在源文件比目标文件较新时,才会更新目标文件

-t   #指定mv的目标目录,此选项使用于移动多个文件到一个目录的情况,目标文件在前,源文件在后。

-S<后缀>:#为备份文件指定(自定义的)后缀

-n  #不覆盖任何现有文件

-T  #将目标当作普通文件,而不是目录

-v  #详细输出命令的执行过程信息

应用举例

重命名文件(目录)

命令格式:mv 源文件 目标文件 或 mv 源目录 目标目录

注意:我们在使用这个命令时必须保证源文件(目录)和目标文件(目录)在同一个目录下,并且目标文件(目录)不存在,否则使用这条命令的效果就由重命名变成文件(目录)的移动了。

首先,我们创建测试需要的文件与目录

[root@CentOS7-1 mv]# ll

total 0

[root@CentOS7-1 mv]# touch mvfiles

[root@CentOS7-1 mv]# mkdir mvdir

[root@CentOS7-1 mv]# ll

total 0

drwxr-xr-x 2 root root 6 Jan  8 09:03 mvdir

-rw-r--r-- 1 root root 0 Jan  8 09:02 mvfiles

进行重命名操作

[root@CentOS7-1 mv]# mv mvfiles mvfilessssss

[root@CentOS7-1 mv]# mv mvdir mvdirectory

[root@CentOS7-1 mv]# ll

total 0

drwxr-xr-x 2 root root 6 Jan  8 09:03 mvdirectory

-rw-r--r-- 1 root root 0 Jan  8 09:02 mvfilessssss

如果需要命令执行的过程,可以加上参数-v

[root@CentOS7-1 mv]# mv -v mvfilessssss mvfiles

‘mvfilessssss’ -> ‘mvfiles’

[root@CentOS7-1 mv]# mv -v mvdirectory mvdir

‘mvdirectory’ -> ‘mvdir’

同时移动单个或多个文件(目录)

命令格式:mv 源文件(目录)1 源文件(目录)2 目标目录 或 mv *文件(目录) 目标目录

同时移动多个文件(目录)有两种方法:

第一种命令格式可以把多个文件(目录)同时移动到目标目录下,文件(目录)之间以空格分隔第二种命令格式采用通配符将具有类似文件名或类型等的文件(目录)同时移动到目标目录下

注意:目标目录下如果存在相同的文件名或目录名,容易误操作将同名文件或目录覆盖。

创建测试用的文件和目录

[root@CentOS7-1 mv]# touch 1.txt 2.txt 3.txt

[root@CentOS7-1 mv]# mkdir 1 2 3 

[root@CentOS7-1 mv]# ll

total 0

drwxr-xr-x 2 root root 6 Jan  8 09:20 1

-rw-r--r-- 1 root root 0 Jan  8 09:19 1.txt

drwxr-xr-x 2 root root 6 Jan  8 09:20 2

-rw-r--r-- 1 root root 0 Jan  8 09:19 2.txt

drwxr-xr-x 2 root root 6 Jan  8 09:20 3

-rw-r--r-- 1 root root 0 Jan  8 09:19 3.txt

移动文件

[root@CentOS7-1 mv]# mv -v 1.txt 2.txt 3.txt /root/mv1/

‘1.txt’ -> ‘/root/mv1/1.txt’

‘2.txt’ -> ‘/root/mv1/2.txt’

‘3.txt’ -> ‘/root/mv1/3.txt’

[root@CentOS7-1 mv]# ll /root/mv1/

total 0

-rw-r--r-- 1 root root 0 Jan  8 09:19 1.txt

-rw-r--r-- 1 root root 0 Jan  8 09:19 2.txt

-rw-r--r-- 1 root root 0 Jan  8 09:19 3.txt

目录的移动其实也是一样操作,也非常的简单。如果目标位置有同名文件,我们不希望它被覆盖,可以加上 -n 选项

[root@CentOS7-1 mv]# ll

total 0

drwxr-xr-x 2 root root 6 Jan  8 09:20 1

drwxr-xr-x 2 root root 6 Jan  8 09:20 2

drwxr-xr-x 2 root root 6 Jan  8 09:20 3

-rw-r--r-- 1 root root 0 Jan  8 09:24 test.txt

[root@CentOS7-1 mv]# ll /root/mv1/

total 0

-rw-r--r-- 1 root root 0 Jan  8 09:19 1.txt

-rw-r--r-- 1 root root 0 Jan  8 09:19 2.txt

-rw-r--r-- 1 root root 0 Jan  8 09:19 3.txt

-rw-r--r-- 1 root root 0 Jan  8 09:25 test.txt

[root@CentOS7-1 mv]# mv -nv test.txt /root/mv1/

[root@CentOS7-1 mv]# ll /root/mv1/

total 0

-rw-r--r-- 1 root root 0 Jan  8 09:19 1.txt

-rw-r--r-- 1 root root 0 Jan  8 09:19 2.txt

-rw-r--r-- 1 root root 0 Jan  8 09:19 3.txt

-rw-r--r-- 1 root root 0 Jan  8 09:25 test.txt

交互式覆盖文件

这个操作只需要添加一个参数(-i)即可

[root@CentOS7-1 mv]# mv test.txt -v -i /root/mv1/

mv: overwrite ‘/root/mv1/test.txt’? y

‘test.txt’ -> ‘/root/mv1/test.txt’

[root@CentOS7-1 mv]# ll /root/mv1/

total 0

-rw-r--r-- 1 root root 0 Jan  8 09:19 1.txt

-rw-r--r-- 1 root root 0 Jan  8 09:19 2.txt

-rw-r--r-- 1 root root 0 Jan  8 09:19 3.txt

-rw-r--r-- 1 root root 0 Jan  8 09:24 test.txt

仅当源文件(目录)较新时才覆盖

从上图中可以看出,mv 目录下的 test.txt 文件较新,如果我们执行反向操作,并且带上-u参数,来测试旧文件是否会覆盖掉新文件:

[root@CentOS7-1 mv]# mv -v -u /root/mv1/test.txt ./

[root@CentOS7-1 mv]# ll

total 0

drwxr-xr-x 2 root root 6 Jan  8 09:20 1

drwxr-xr-x 2 root root 6 Jan  8 09:20 2

drwxr-xr-x 2 root root 6 Jan  8 09:20 3

-rw-r--r-- 1 root root 0 Jan  8 09:36 test.txt

结果表明并没有覆盖掉新文件,接下来,我们测试仅当源文件(目录)较新时才覆盖这个功能。

[root@CentOS7-1 mv]# mv -v -u ./test.txt /root/mv1/

mv: overwrite ‘/root/mv1/test.txt’? y

‘./test.txt’ -> ‘/root/mv1/test.txt’

[root@CentOS7-1 mv]# ll /root/mv1/

total 0

-rw-r--r-- 1 root root 0 Jan  8 09:19 1.txt

-rw-r--r-- 1 root root 0 Jan  8 09:19 2.txt

-rw-r--r-- 1 root root 0 Jan  8 09:19 3.txt

-rw-r--r-- 1 root root 0 Jan  8 09:36 test.txt

从上图结果中可以看出覆盖成功,这种操作可以用在大量文件移动时,也可以用在更新文件或目录时。

覆盖文件前创建备份

[root@CentOS7-1 mv]# cat test1.txt 

1

[root@CentOS7-1 mv]# cat test2.txt 

2

如果test2.txt存在,原来的文件会被备份

[root@CentOS7-1 mv]# mv -v -b test1.txt test2.txt

mv: overwrite ‘test2.txt’? y

‘test1.txt’ -> ‘test2.txt’ (backup: ‘test2.txt~’)

[root@CentOS7-1 mv]# ll

total 12

-rw-r--r-- 1 root root 2 Jan  8 09:49 test2.txt

-rw-r--r-- 1 root root 2 Jan  8 09:49 test2.txt~

-rw-r--r-- 1 root root 2 Jan  8 09:49 test3.txt

[root@CentOS7-1 mv]# cat test2.txt

1

[root@CentOS7-1 mv]# cat test2.txt~

2

在备份的过程中,我们还可以通过参数--suffix=xxx来自定义文件的后缀名:

[root@CentOS7-1 mv]# cat test2.txt

1

[root@CentOS7-1 mv]# cat test3.txt 

3

[root@CentOS7-1 mv]# mv -v -b --suffix=.bak test2.txt test3.txt

mv: overwrite ‘test3.txt’? y

‘test2.txt’ -> ‘test3.txt’ (backup: ‘test3.txt.bak’)

[root@CentOS7-1 mv]# cat test3.txt

1

[root@CentOS7-1 mv]# cat test3.txt.bak 

3

以上就是民工哥今天给大家分享的关于 mv 命令的各种用法以及实例操作,欢迎大家分享你所知道的更多关于 mv 命令的用法,请在评论区留言。

推荐阅读 点击标题可跳转

GPT-4 震撼发布!史上最强模型,强大到感觉自己快失业了

偷偷爆料下 955 不加班公司名单(2023 年最新版!)

这才是横跨三大操作系统的终极神器!真的太太太好用了

面试官:一台服务器最大能支持多少条 TCP 连接?问倒一大片

服务器爆了,你却连如何快速定位错误都不知道?这锅你背定了

MySQL InnoDB Cluster 多节点高可用集群部署实战

PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。点“在看”支持我们吧!

文章来源

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: