mv 命令详解

| 选择喜欢的代码风格  

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

mv 命令安装:


-bash: mv: command not found

#Debian
apt-get install coreutils

#Ubuntu
apt-get install coreutils

#Arch Linux
pacman -S coreutils

#Kali Linux
apt-get install coreutils

#CentOS
yum install coreutils

#Fedora
dnf install coreutils

#Raspbian
apt-get install coreutils

#Docker
docker run cmd.cat/mv mv

mv 命令补充说明:


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

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

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

mv 命令语法:


mv [options] [-T] source destination
mv [options] source [source2 ...] destination
mv [options] -t destination source [source2 ...]

mv 命令选项:


--backup=<备份模式>:若需覆盖文件,则覆盖前先行备份;
-b:当文件存在时,覆盖前,为其创建一个备份;
-f:若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目录;
-i:交互式操作,覆盖前先行询问用户,如果源文件与目标文件或目标目录中的文件同名,则询问用户是否覆盖目标文件。用户输入”y”,表示将覆盖目标文件;输入”n”,表示取消对源文件的移动。这样可以避免误将文件覆盖。
--strip-trailing-slashes:删除源文件中的斜杠“/”;
-S<后缀>:为备份文件指定后缀,而不使用默认的后缀;
-n, --no-clobber  永远不要覆盖任何现有文件。
-t --target-directory=<目录>:指定源文件要移动到目标目录;
-T, --no-target-directory 将目标视为普通文件,而不是目录。
-u, --update  如果文件较新,请勿覆盖文件。 仅当目标文件早于源文件或目标文件尚不存在时才会发生移动。当源文件比目标文件新或者目标文件不存在时,才执行移动操作。
-v, --verbose 提供详细输出。 打印移动的每个文件的名称。

注意:如果指定上述选项 -i,-f 或 -n 中的多个选项,则只有指定的最终选项生效

mv 命令参数:


源文件:源文件列表。
目标文件:如果“目标文件”是文件名则在移动文件的同时,将其改名为“目标文件”;如果“目标文件”是目录名则将源文件移动到“目标文件”下。

mv 命令实例


#将文件myfile.txt移动到myfiles目录中。 
#如果myfiles是一个文件,它将被覆盖。 
#如果文件被标记为只读,但您拥有该文件,则会在覆盖之前提示您。
mv myfile.txt myfiles

#如果myfiles是文件或目录,并且myfiles2是目录,请将myfiles移动到myfiles2中。 
#如果myfiles2不存在,则文件或目录myfiles将重命名为myfiles2。
mv myfiles myfiles2

#将文件myfile.txt移动到当前目录的父目录中。
mv myfile.txt ../

#将文件myfile1和myfile2移动到myfiles目录中。下面2个等效;
mv -t myfiles myfile1 myfile2
mv myfile1 myfile2 myfiles

#如果file2存在且是目录,则将文件移入其中。 如果file2不存在,则将文件重命名为file2。 如果file2存在且是文件,则不会发生任何事情。
mv -n file file2

#如果file2存在且是一个文件,它将被覆盖。
mv -f file file2

#如果file2存在且是文件,则会给出提示:
mv -i file file2
mv: overwrite 'file2'?
Entering "y", "yes", "Yes", or "Y" will result in the file being overwritten. Any other input will skip the file.

#与 mv -i 相同。 f选项被忽略。
mv -fi file file2

#与 mv -f 相同。 覆盖没有提示。 i选项被忽略。
mv -fi file file2

#重命名文件 "My file.txt" 为 "My file 2.txt",这里空格被转义了。
mv My\ file.txt My\ file\ 2.txt

#同上命令等效
mv "My file.txt" "My file 2.txt"

分析下面 mv 命令的执行结果:

mv "My file.txt" myfiles
--------
如果 myfiles 是一个目录, My file.txt 将被移动到 myfiles 目录;
如果 myfiles 是一个文件, My file.txt 将被重命名为 myfiles, 并且原来的文件 myfiles 将被覆盖;
如果 myfiles 不存在, My file.txt 将被重命名为 myfiles;

mv My*.txt myfiles
--------
如果 myfiles 是一个目录: 所有以 .txt结尾的文件,将被移动到 myfiles 目录;
如果 myfiles 不存在或不是目录, mv 将报错。

my My\ file??.txt myfiles
--------
如果 myfiles 是目录: 在My file 和 .txt 之间,任何文件包含 0个、1个、2个字符的文件将被移动到 myfiles 目录;
如果 myfiles 不存在或不是目录, mv 将报错。

mv 备份:

#如果file2存在,它将被重命名为file2。
mv -b file file2

#如果file2存在,它将被重命名为file2.bak。
mv -b --suffix=.bak file file2

#如果file2存在,它将被重命名为file2。~1~。 如果file2 .~1~存在,则将其重命名为file2。~2~等
mv --backup=numbered; mv file file2
VERSION_CONTROL=numbered mv -b file file2

mv 命令扩展阅读:




mv 命令评论