1. 命令介绍
mv命令用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。source表示源文件或目录,target表示目标文件或目录。如果将一个文件移到一个已经存在的目标文件中,则目标文件的内容将被覆盖。
mv命令可以用来将源文件移至一个目标文件中,或将一组文件移至一个目标目录中。源文件被移至目标文件有两种不同的结果:
- 如果目标文件是到某一目录文件的路径,源文件会被移到此目录下,且文件名不变。
- 如果目标文件不是目录文件,则源文件名(只能有一个)会变为此目标文件名,并覆盖己存在的同名文件。如果源文件和目标文件在同一个目录下,mv的作用就是改文件名。当目标文件是目录文件时,源文件或目录参数可以有多个,则所有的源文件都会被移至目标文件中。所有移到该目录下的文件都将保留以前的文件名。
2. 命令格式
mv [OPTION]... [-T] SOURCE DEST
or: mv [OPTION]... SOURCE... DIRECTORY
or: mv [OPTION]... -t DIRECTORY SOURCE...
3. 命令功能
将源文件重命名为目标文件,或将源文件移动至指定目录
4. 常用选项
选项 | 含义 |
---|---|
--backup=<备份模式> | 若需覆盖文件,则覆盖前先行备份;共有四种备份策略: 1.CONTROL=none或off : 不备份。 2.CONTROL=numbered或t:数字编号的备份 3.CONTROL=existing或nil:如果存在以数字编号的备份,则继续编号备份m+1...n: 执行mv操作前已存在以数字编号的文件log2.txt.1,那么再次执行将产生log2.txt2,以次类推。如果之前没有以数字编号的文件,则使用下面讲到的简单备份。 4.CONTROL=simple或never:使用简单备份:在被覆盖前进行了简单备份,简单备份只能有一份,再次被覆盖时,简单备份也会被覆盖。 |
-b | 当文件存在时,覆盖前,为其创建一个备份; |
-f | 若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目录; |
-i | 交互式操作,覆盖前先行询问用户,如果源文件与目标文件或目标目录中的文件同名,则询问用户是否覆盖目标文件。用户输入”y”,表示将覆盖目标文件;输入”n”,表示取消对源文件的移动。这样可以避免误将文件覆盖。提示:默认命令行执行的是mv命令是设置alias mv='mv -i' 的别名 |
-u | 当源文件比目标文件新或者目标文件不存在时,才执行移动操作。 |
-t | -target-directory=DIRECTORY move all SOURCE arguments into DIRECTORY,即指定mv的目标目录,该选项适用于移动多个源文件到一个目录的情况,此时目标目录在前,源文件在后。 |
如果您指定了-i、-f、-n 中的多个,仅最后一个生效。
5. 常用实例
- 给文件或者目录重命名
[root@localhost ~]# ll
total 4
-rw-------. 1 root root 1482 May 24 18:16 anaconda-ks.cfg
-rw-r--r-- 1 root root 0 Nov 14 23:09 test02.log
-rw-r--r-- 1 root root 0 Nov 14 23:09 test03.log
drwxr-xr-x. 3 root root 20 Nov 12 18:26 test2
drwx------. 2 root root 6 Nov 12 18:31 test3
[root@localhost ~]# mv test02.log test.log
[root@localhost ~]# ll
total 4
-rw-------. 1 root root 1482 May 24 18:16 anaconda-ks.cfg
-rw-r--r-- 1 root root 0 Nov 14 23:09 test03.log
drwxr-xr-x. 3 root root 20 Nov 12 18:26 test2
drwx------. 2 root root 6 Nov 12 18:31 test3
-rw-r--r-- 1 root root 0 Nov 14 23:09 test.log
- 将文件移动到指定目录
[root@localhost ~]# ll
total 4
-rw-------. 1 root root 1482 May 24 18:16 anaconda-ks.cfg
-rw-r--r-- 1 root root 0 Nov 14 23:09 test03.log
drwxr-xr-x. 3 root root 20 Nov 12 18:26 test2
drwx------. 2 root root 6 Nov 12 18:31 test3
-rw-r--r-- 1 root root 0 Nov 14 23:09 test.log
[root@localhost ~]# ll test3/
total 0
[root@localhost ~]# mv test03.log test3/
[root@localhost ~]# ll
total 4
-rw-------. 1 root root 1482 May 24 18:16 anaconda-ks.cfg
drwxr-xr-x. 3 root root 20 Nov 12 18:26 test2
drwx------. 2 root root 24 Nov 15 21:36 test3
-rw-r--r-- 1 root root 0 Nov 14 23:09 test.log
[root@localhost ~]# ll test3/
total 0
-rw-r--r-- 1 root root 0 Nov 14 23:09 test03.log
- 同时移动多个文件到指定位置
# 方法一:mv [OPTION]... SOURCE... DIRECTORY
[root@localhost ~]# touch log{1..4}.txt
[root@localhost ~]# ls
anaconda-ks.cfg log1.txt log2.txt log3.txt log4.txt test2 test3 test.log
[root@localhost ~]# ls test3/
test03.log
[root@localhost ~]# mv log1.txt log2.txt log3.txt log4.txt test3/
[root@localhost ~]# ls test3/
log1.txt log2.txt log3.txt log4.txt test03.log
# 方法二:mv [OPTION]... -t DIRECTORY SOURCE...
[root@localhost test3]# ll
total 0
-rw-r--r-- 1 root root 0 Nov 15 21:37 log1.txt
-rw-r--r-- 1 root root 0 Nov 15 21:37 log2.txt
-rw-r--r-- 1 root root 0 Nov 15 21:37 log3.txt
-rw-r--r-- 1 root root 0 Nov 15 21:37 log4.txt
-rw-r--r-- 1 root root 0 Nov 14 23:09 test03.log
[root@localhost test3]# ll /root/
total 4
-rw-------. 1 root root 1482 May 24 18:16 anaconda-ks.cfg
drwxr-xr-x. 3 root root 20 Nov 12 18:26 test2
drwx------. 2 root root 88 Nov 15 21:38 test3
-rw-r--r-- 1 root root 0 Nov 14 23:09 test.log
[root@localhost test3]# mv -t /root/ log{1..4}.txt test03.log
[root@localhost test3]# ls
[root@localhost test3]# ll /root
total 4
-rw-------. 1 root root 1482 May 24 18:16 anaconda-ks.cfg
-rw-r--r-- 1 root root 0 Nov 15 21:37 log1.txt
-rw-r--r-- 1 root root 0 Nov 15 21:37 log2.txt
-rw-r--r-- 1 root root 0 Nov 15 21:37 log3.txt
-rw-r--r-- 1 root root 0 Nov 15 21:37 log4.txt
-rw-r--r-- 1 root root 0 Nov 14 23:09 test03.log
drwxr-xr-x. 3 root root 20 Nov 12 18:26 test2
drwx------. 2 root root 6 Nov 15 21:40 test3
-rw-r--r-- 1 root root 0 Nov 14 23:09 test.log
- 将文件file1改名为file2,如果file2已经存在,则询问是否覆盖
[root@localhost ~]# ll
total 16
-rw-------. 1 root root 1482 May 24 18:16 anaconda-ks.cfg
-rw-r--r-- 1 root root 5 Nov 15 21:47 log1.txt
-rw-r--r-- 1 root root 5 Nov 15 21:47 log2.txt
-rw-r--r-- 1 root root 0 Nov 15 21:37 log3.txt
-rw-r--r-- 1 root root 0 Nov 15 21:37 log4.txt
-rw-r--r-- 1 root root 4 Nov 15 21:47 log.txt
drwxr-xr-x. 3 root root 20 Nov 12 18:26 test2
drwx------. 2 root root 6 Nov 15 21:40 test3
[root@localhost ~]# cat log.txt
log
[root@localhost ~]# cat log1.txt
log1
[root@localhost ~]# mv log1.txt log.txt
mv: overwrite ‘log.txt’? y
[root@localhost ~]# cat log.txt
log1
[root@localhost ~]# ll
total 12
-rw-------. 1 root root 1482 May 24 18:16 anaconda-ks.cfg
-rw-r--r-- 1 root root 5 Nov 15 21:47 log2.txt
-rw-r--r-- 1 root root 0 Nov 15 21:37 log3.txt
-rw-r--r-- 1 root root 0 Nov 15 21:37 log4.txt
-rw-r--r-- 1 root root 5 Nov 15 21:47 log.txt
drwxr-xr-x. 3 root root 20 Nov 12 18:26 test2
drwx------. 2 root root 6 Nov 15 21:40 test3
- 将文件file1改名为file2,即使file2存在,也是直接覆盖掉。
[root@localhost ~]# ll
total 12
-rw-------. 1 root root 1482 May 24 18:16 anaconda-ks.cfg
-rw-r--r-- 1 root root 5 Nov 15 21:47 log2.txt
-rw-r--r-- 1 root root 0 Nov 15 21:37 log3.txt
-rw-r--r-- 1 root root 0 Nov 15 21:37 log4.txt
-rw-r--r-- 1 root root 5 Nov 15 21:47 log.txt
drwxr-xr-x. 3 root root 20 Nov 12 18:26 test2
drwx------. 2 root root 6 Nov 15 21:40 test3
[root@localhost ~]# cat log.txt
log1
[root@localhost ~]# cat log2.txt
log2
[root@localhost ~]# mv -f log2.txt log.txt
[root@localhost ~]# cat log.txt
log2
[root@localhost ~]# ls
anaconda-ks.cfg log3.txt log4.txt log.txt test2 test3
- 移动目录或者重命名
[root@localhost ~]# ll
total 8
-rw-------. 1 root root 1482 May 24 18:16 anaconda-ks.cfg
-rw-r--r-- 1 root root 0 Nov 15 21:37 log3.txt
-rw-r--r-- 1 root root 0 Nov 15 21:37 log4.txt
-rw-r--r-- 1 root root 5 Nov 15 21:47 log.txt
drwxr-xr-x. 3 root root 20 Nov 12 18:26 test2
drwx------. 2 root root 6 Nov 15 21:40 test3
[root@localhost ~]# mv test2/ test1
[root@localhost ~]# ll
total 8
-rw-------. 1 root root 1482 May 24 18:16 anaconda-ks.cfg
-rw-r--r-- 1 root root 0 Nov 15 21:37 log3.txt
-rw-r--r-- 1 root root 0 Nov 15 21:37 log4.txt
-rw-r--r-- 1 root root 5 Nov 15 21:47 log.txt
drwxr-xr-x. 3 root root 20 Nov 12 18:26 test1
drwx------. 2 root root 6 Nov 15 21:40 test3
[root@localhost ~]# mv test1/ test3/
[root@localhost ~]# ll
total 8
-rw-------. 1 root root 1482 May 24 18:16 anaconda-ks.cfg
-rw-r--r-- 1 root root 0 Nov 15 21:37 log3.txt
-rw-r--r-- 1 root root 0 Nov 15 21:37 log4.txt
-rw-r--r-- 1 root root 5 Nov 15 21:47 log.txt
drwx------. 3 root root 19 Nov 15 21:51 test3
[root@localhost ~]# ll test3/
total 0
drwxr-xr-x. 3 root root 20 Nov 12 18:26 test1
如果目录dir2不存在,将目录dir1改名为dir2;否则,将dir1移动到dir2中。
- 文件被覆盖前做简单备份,前面加参数-b
[root@localhost ~]# ls
anaconda-ks.cfg log3.txt log4.txt log.txt test3
[root@localhost ~]# cat log3.txt
log3
[root@localhost ~]# cat log4.txt
log4
[root@localhost ~]# mv -b log3.txt log4.txt
mv: overwrite ‘log4.txt’? y
[root@localhost ~]# ls
anaconda-ks.cfg log4.txt log4.txt~ log.txt test3
[root@localhost ~]# cat log4.txt
log3
[root@localhost ~]# cat log4.txt~
log4
-b 不接受参数,mv会去读取环境变量VERSION_CONTROL来作为备份策略
网友评论