美文网首页linux常用命令
文件和目录操作命令-07-mv命令

文件和目录操作命令-07-mv命令

作者: 夏胖运维 | 来源:发表于2020-11-15 22:00 被阅读0次

    1. 命令介绍

    mv命令用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。source表示源文件或目录,target表示目标文件或目录。如果将一个文件移到一个已经存在的目标文件中,则目标文件的内容将被覆盖。

    mv命令可以用来将源文件移至一个目标文件中,或将一组文件移至一个目标目录中。源文件被移至目标文件有两种不同的结果:

    1. 如果目标文件是到某一目录文件的路径,源文件会被移到此目录下,且文件名不变。
    2. 如果目标文件不是目录文件,则源文件名(只能有一个)会变为此目标文件名,并覆盖己存在的同名文件。如果源文件和目标文件在同一个目录下,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. 常用实例

    1. 给文件或者目录重命名
    [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
    
    1. 将文件移动到指定目录
    [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
    
    1. 同时移动多个文件到指定位置
    # 方法一: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
    
    1. 将文件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
    
    1. 将文件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
    
    1. 移动目录或者重命名
    [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中。

    1. 文件被覆盖前做简单备份,前面加参数-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来作为备份策略

    相关文章

      网友评论

        本文标题:文件和目录操作命令-07-mv命令

        本文链接:https://www.haomeiwen.com/subject/uoyobktx.html