mv 移动(或重命名)文件目录

mv命令功能:1、把文件(或目录)移动到另外一个目录中;2、变更文件(或目录)名称。


重命名: mv  [选项]  源文件或目录  目标文件

当“目标”参数类型是文件时,实现重命名。源文件(或源目录)只能有一个,它将所给的源文件(或目录)重命名为目标文件名。

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

当“目标”参数类型是已存在的目录名称时,源文件(或目录)可以有多个,mv命令将把源文件均移至目标目录中。在跨文件系统移动文件时,mv先拷贝,再将原有文件删除,而链至该文件的链接也将丢失。
短选项长选项含义
--backup[=CONTROL]若文件存在,覆盖文件时,先备份文件。使用一个~作为后缀来备份已存在的目标文件。
-b类似--backup,但不接受任何参数
-f--force禁止交互操作。强制覆盖。若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目录不给任何指示
指定此选项后,i选项将不再起作用。
-i--interactive交互方式操作。如果mv操作将导致对已存在的目标文件的覆盖,此时系统询问是否重写,要求用户回答y或n,这样可以避免误覆盖文件。
-S<附加字尾>--suffix=<附加字尾>与-b参数一并使用,可指定备份文件的所要附加的字尾。
-t--target-directory=目标目录适用于移动多个源文件到一个目录的情况,此时目标目录在前,源文件在后。
-u--update在移动或更改文件名时,若目标文件已存在,且其文件日期比源文件新,则不覆盖目标文件。
-v--verbose执行时显示详细的信息。
-V=<方法>--version-control=<方法>与-b参数一并使用,可指定备份的方法。

备份数据

-b 不接受参数,mv会去读取环境变量VERSION_CONTROL来作为备份策略。

--backup该选项指定如果目标文件存在时的动作,共有四种备份策略:

  • CONTROL=none或off : 不备份。
  • CONTROL=numbered或t:数字编号的备份
  • CONTROL=existing或nil:如果存在以数字编号的备份,则继续编号备份m+1...n:执行mv操作前已存在以数字编号的文件log2.txt.~1~,那么再次执行将产生log2.txt~2~,以次类推。如果之前没有以数字编号的文件,则使用下面讲到的简单备份。
  • CONTROL=simple或never:使用简单备份:在被覆盖前进行了简单备份,简单备份只能有一份,再次被覆盖时,简单备份也会被覆盖。

移动多个文件

把多个源文件移动到一个目录里面。多个源文件之间用空格隔开。

  • 源文件与目标目录之间用空格隔开,并且目标目录一定在最后面。
    比如:有a b c三个文件,一个目录d。mv a b c d
  • 使用-t选项,-t后面紧接着的就是要移动到的目标目录,并且不能有多个目标目录。
    mv a b c -t d
    mv -t d a b c

在linux下目录也是文件,只是文件的类型是目录(d)。硬件设备都是一个文件。linux下文件分五类:

  • 普通文件(-)
  • 目录(d)
  • 字符设备或块设备文件(b或者c)
  • 套接口文件(s)
  • 符号链接文件(l)
文件改名 
[root@localhost test]# ll 
总计 20drwxr-xr-x 6 root root 4096 10-27 01:58 scf 
drwxrwxrwx 2 root root 4096 10-25 17:46 test3 
drwxr-xr-x 2 root root 4096 10-25 17:56 test4 
drwxr-xr-x 3 root root 4096 10-25 17:56 test5 
-rw-r--r-- 1 root root   16 10-28 06:04 test.log 
[root@localhost test]# mv test.log test1.txt   将文件test.log重命名为test1.txt 
[root@localhost test]# ll 
总计 20drwxr-xr-x 6 root root 4096 10-27 01:58 scf 
-rw-r--r-- 1 root root   16 10-28 06:04 test1.txt 
drwxrwxrwx 2 root root 4096 10-25 17:46 test3 
drwxr-xr-x 2 root root 4096 10-25 17:56 test4 
drwxr-xr-x 3 root root 4096 10-25 17:56 test5 
 
 
移动单个文件 
[root@localhost test]# ll 
总计 20drwxr-xr-x 6 root root 4096 10-27 01:58 scf 
-rw-r--r-- 1 root root   29 10-28 06:05 test1.txt 
drwxrwxrwx 2 root root 4096 10-25 17:46 test3 
drwxr-xr-x 2 root root 4096 10-25 17:56 test4 
drwxr-xr-x 3 root root 4096 10-25 17:56 test5 
[root@localhost test]# mv test1.txt test3   将test1.txt文件移到目录test3中 
[root@localhost test]# ll  
总计 16drwxr-xr-x 6 root root 4096 10-27 01:58 scf 
drwxrwxrwx 2 root root 4096 10-28 06:09 test3 
drwxr-xr-x 2 root root 4096 10-25 17:56 test4 
drwxr-xr-x 3 root root 4096 10-25 17:56 test5 
[root@localhost test]# cd test3 
[root@localhost test3]# ll 
总计 4 
-rw-r--r-- 1 root root 29 10-28 06:05 test1.txt 
[root@localhost test3]# 
 
 
移动多个文件 
[root@localhost test]# ll 
总计 28 
-rw-r--r-- 1 root root    8 10-28 06:15 log1.txt 
-rw-r--r-- 1 root root   12 10-28 06:15 log2.txt 
-rw-r--r-- 1 root root   13 10-28 06:16 log3.txt 
drwxrwxrwx 2 root root 4096 10-28 06:09 test3 
[root@localhost test]# mv log1.txt log2.txt log3.txt test3   将文件log1.txt,log2.txt,log3.txt移动到目录test3中。 
[root@localhost test]# ll 
总计 16drwxrwxrwx 2 root root 4096 10-28 06:18 test3 
[root@localhost test]# cd test3/ 
[root@localhost test3]# ll 
总计 16 
-rw-r--r-- 1 root root  8 10-28 06:15 log1.txt 
-rw-r--r-- 1 root root 12 10-28 06:15 log2.txt 
-rw-r--r-- 1 root root 13 10-28 06:16 log3.txt 
-rw-r--r-- 1 root root 29 10-28 06:05 test1.txt 
[root@localhost test3]# 
[root@localhost test3]# ll 
总计 20 
-rw-r--r-- 1 root root    8 10-28 06:15 log1.txt 
-rw-r--r-- 1 root root   12 10-28 06:15 log2.txt 
-rw-r--r-- 1 root root   13 10-28 06:16 log3.txt 
drwxr-xr-x 2 root root 4096 10-28 06:21 logs 
-rw-r--r-- 1 root root   29 10-28 06:05 test1.txt 
[root@localhost test3]# mv -t /opt/soft/test/test4/ log1.txt log2.txt log3.txt   又将log1.txt,log2.txt,log3.txt三个文件移动到test4目录中去 
[root@localhost test3]# cd .. 
[root@localhost test]# cd test4/ 
[root@localhost test4]# ll 
总计 12 
-rw-r--r-- 1 root root  8 10-28 06:15 log1.txt 
-rw-r--r-- 1 root root 12 10-28 06:15 log2.txt 
-rw-r--r-- 1 root root 13 10-28 06:16 log3.txt 
[root@localhost test4]# 
 
交互模式 
[root@localhost test4]# ll 
总计 12 
-rw-r--r-- 1 root root  8 10-28 06:15 log1.txt 
-rw-r--r-- 1 root root 12 10-28 06:15 log2.txt 
-rw-r--r-- 1 root root 13 10-28 06:16 log3.txt 
[root@localhost test4]# cat log1.txt 
odfdfs 
[root@localhost test4]# cat log2.txt 
ererwerwer 
[root@localhost test4]# mv -i log1.txt log2.txt   将文件file1改名为file2,如果file2已经存在,则询问是否覆盖 
mv:是否覆盖“log2.txt”? y 
[root@localhost test4]# cat log2.txt  
odfdfs 
[root@localhost test4]# 
 
 
强制覆盖 
[root@localhost test4]# ll 
总计 8 
-rw-r--r-- 1 root root  8 10-28 06:15 log2.txt 
-rw-r--r-- 1 root root 13 10-28 06:16 log3.txt 
[root@localhost test4]# cat log2.txt  
odfdfs 
[root@localhost test4]# cat log3 
cat: log3: 没有那个文件或目录 
[root@localhost test4]# ll 
总计 8 
-rw-r--r-- 1 root root  8 10-28 06:15 log2.txt 
-rw-r--r-- 1 root root 13 10-28 06:16 log3.txt 
[root@localhost test4]# cat log2.txt  
odfdfs 
[root@localhost test4]# cat log3.txt 
dfosdfsdfdss 
[root@localhost test4]# mv -f log3.txt log2.txt   直接覆盖掉 
[root@localhost test4]# cat log2.txt 
dfosdfsdfdss 
[root@localhost test4]# ll 
总计 4 
-rw-r--r-- 1 root root 13 10-28 06:16 log2.txt 
[root@localhost test4]# 
 
 
 
 
目录的移动 
如果目录dir2不存在,将目录dir1改名为dir2;否则,将dir1移动到dir2中。
[root@localhost test4]# ll 
-rw-r--r-- 1 root root 13 10-28 06:16 log2.txt 
[root@localhost test4]# ll 
-rw-r--r-- 1 root root 13 10-28 06:16 log2.txt 
[root@localhost test4]# cd .. 
[root@localhost test]# ll 
drwxr-xr-x 6 root root 4096 10-27 01:58 scf 
drwxrwxrwx 3 root root 4096 10-28 06:24 test3 
drwxr-xr-x 2 root root 4096 10-28 06:48 test4 
drwxr-xr-x 3 root root 4096 10-25 17:56 test5 
[root@localhost test]# cd test3 
[root@localhost test3]# ll 
drwxr-xr-x 2 root root 4096 10-28 06:21 logs 
-rw-r--r-- 1 root root   29 10-28 06:05 test1.txt 
[root@localhost test3]# cd .. 
[root@localhost test]# mv test4 test3  
[root@localhost test]# ll 
drwxr-xr-x 6 root root 4096 10-27 01:58 scf 
drwxrwxrwx 4 root root 4096 10-28 06:54 test3 
drwxr-xr-x 3 root root 4096 10-25 17:56 test5 
[root@localhost test]# cd test3/ 
[root@localhost test3]# ll 
drwxr-xr-x 2 root root 4096 10-28 06:21 logs 
-rw-r--r-- 1 root root   29 10-28 06:05 test1.txt 
drwxr-xr-x 2 root root 4096 10-28 06:48 test4 
[root@localhost test3]# 
 
移动当前文件夹下的所有文件到上一级目录 
[root@localhost test4]# ll 
-rw-r--r-- 1 root root 25 10-28 07:02 log1.txt 
-rw-r--r-- 1 root root 13 10-28 06:16 log2.txt 
[root@localhost test4]# mv * ../ 
[root@localhost test4]# ll 
[root@localhost test4]# cd .. 
[root@localhost test3]# ll 
-rw-r--r-- 1 root root   25 10-28 07:02 log1.txt 
-rw-r--r-- 1 root root   13 10-28 06:16 log2.txt 
drwxr-xr-x 2 root root 4096 10-28 06:21 logs 
-rw-r--r-- 1 root root   29 10-28 06:05 test1.txt 
drwxr-xr-x 2 root root 4096 10-28 07:02 test4 
 
 
把当前目录的一个子目录里的文件移动到另一个子目录里 
[root@localhost test]# ll 
drwxr-xr-x 6 root root 4096 10-27 01:58 scf 
drwxrwxrwx 4 root root 4096 10-28 07:02 test3 
drwxr-xr-x 3 root root 4096 10-25 17:56 test5 
[root@localhost test]# cd test3 
[root@localhost test3]# ll 
-rw-r--r-- 1 root root   25 10-28 07:02 log1.txt 
-rw-r--r-- 1 root root   13 10-28 06:16 log2.txt 
drwxr-xr-x 2 root root 4096 10-28 06:21 logs 
-rw-r--r-- 1 root root   29 10-28 06:05 test1.txt 
drwxr-xr-x 2 root root 4096 10-28 07:02 test4 
[root@localhost test3]# cd .. 
[root@localhost test]# mv test3/*.txt test5  
[root@localhost test]# cd test5 
[root@localhost test5]# ll 
-rw-r--r-- 1 root root   25 10-28 07:02 log1.txt 
-rw-r--r-- 1 root root   13 10-28 06:16 log2.txt 
-rw-r--r-- 1 root root   29 10-28 06:05 test1.txt 
drwxr-xr-x 2 root root 4096 10-25 17:56 test5-1 
[root@localhost test5]# cd .. 
[root@localhost test]# cd test3/ 
[root@localhost test3]# ll 
drwxr-xr-x 2 root root 4096 10-28 06:21 logs 
drwxr-xr-x 2 root root 4096 10-28 07:02 test4 
[root@localhost test3]# 
 
 
 
文件被覆盖前做简单备份,前面加参数-b 
[root@localhost test5]# ll 
-rw-r--r-- 1 root root   25 10-28 07:02 log1.txt 
-rw-r--r-- 1 root root   13 10-28 06:16 log2.txt 
-rw-r--r-- 1 root root   29 10-28 06:05 test1.txt 
drwxr-xr-x 2 root root 4096 10-25 17:56 test5-1 
[root@localhost test5]# mv log1.txt -b log2.txt 
mv:是否覆盖“log2.txt”? y 
[root@localhost test5]# ll 
-rw-r--r-- 1 root root   25 10-28 07:02 log2.txt 
-rw-r--r-- 1 root root   13 10-28 06:16 log2.txt~ 
-rw-r--r-- 1 root root   29 10-28 06:05 test1.txt 
drwxr-xr-x 2 root root 4096 10-25 17:56 test5-1 
[root@localhost test5]#