一、mv命令介绍
1. mv命令简介
mv命令主要是在Linux系统中用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。source表示源文件或目录,target表示目标文件或目录。如果将一个文件移到一个已经存在的目标文件中,则目标文件的内容将被覆盖。
2. mv命令的使用结果
- mv命令可以用来将源文件移至一个目标文件中,或将一组文件移至一个目标目录中。源文件被移至目标文件有不同的结果:
1.如果目标文件是到某一目录文件的路径,源文件会被移到此目录下,且文件名不变。 2.如果目标文件不是目录文件,则源文件名(只能有一个)会变为此目标文件名,并覆盖己存在的同名文件。 3.如果源文件和目标文件在同一个目录下,mv的作用就是改文件名。 4.当目标文件是目录时,源文件或目录参数可以有多个,则所有的源文件都会被移至目标目录中。所有移到该目录下的文件都将保留以前的文件名。
二、mv命令的使用帮助
1. 在命令行的帮助信息
在命令行的,mv --help显示mv的帮助信息。
- [root@jeven ~]# mv --help
- Usage: mv [OPTION]... [-T] SOURCE DEST
- or: mv [OPTION]... SOURCE... DIRECTORY
- or: mv [OPTION]... -t DIRECTORY SOURCE...
- Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.
- Mandatory arguments to long options are mandatory for short options too.
- --backup[=CONTROL] make a backup of each existing destination file
- -b like --backup but does not accept an argument
- -f, --force do not prompt before overwriting
- -i, --interactive prompt before overwrite
- -n, --no-clobber do not overwrite an existing file
- If you specify more than one of -i, -f, -n, only the final one takes effect.
- --strip-trailing-slashes remove any trailing slashes from each SOURCE
- argument
- -S, --suffix=SUFFIX override the usual backup suffix
- -t, --target-directory=DIRECTORY move all SOURCE arguments into DIRECTORY
- -T, --no-target-directory treat DEST as a normal file
- -u, --update move only when the SOURCE file is newer
- than the destination file or when the
- destination file is missing
- -v, --verbose explain what is being done
- -Z, --context set SELinux security context of destination
- file to default type
- --help display this help and exit
- --version output version information and exit
- The backup suffix is '~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.
- The version control method may be selected via the --backup option or through
- the VERSION_CONTROL environment variable. Here are the values:
- none, off never make backups (even if --backup is given)
- numbered, t make numbered backups
- existing, nil numbered if numbered backups exist, simple otherwise
- simple, never always make simple backups
- GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
- For complete documentation, run: info coreutils 'mv invocation'
复制代码
2. mv常用选项
mv命令的常用选项
- --backup=<备份模式>:若需覆盖文件,则覆盖前先行备份;
- -b:当文件存在时,覆盖前,为其创建一个备份;
- -f:若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目录;
- -i:交互式操作,覆盖前先行询问用户,如果源文件与目标文件或目标目录中的文件同名,则询问用户是否覆盖目标文件。用户输入”y”,表示将覆盖目标文件;输入”n”,表示取消对源文件的移动。这样可以避免误将文件覆盖。
- --strip-trailing-slashes:删除源文件中的斜杠“/”;
- -S<后缀>:为备份文件指定后缀,而不使用默认的后缀;
- --target-directory=<目录>:指定源文件要移动到目标目录;
- -u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。
复制代码
三、mv命令的基本使用
1. 创建源目录和目标目录
创建一个源目录和目标目录
- [root@jeven ~]# mkdir /source
- [root@jeven ~]# mkdir /target
复制代码
2. 新建测试文件
在源目录和目标目录分别新建测试文件。
- [root@jeven ~]# touch /source/sou_file{01..03}.txt
- [root@jeven ~]# ls /source/
- sou_file01.txt sou_file02.txt sou_file03.txt
复制代码- [root@jeven ~]# touch /target/tar_file{01..03}.txt
- [root@jeven ~]# ls /target/
- tar_file01.txt tar_file02.txt tar_file03.txt
复制代码
3. 将源目录文件复制到目标目录
将/source/sou_file01.txt 复制到/target/目录下
- [root@jeven ~]# mv /source/sou_file01.txt /target/
- [root@jeven ~]# ls /target/
- sou_file01.txt tar_file01.txt tar_file02.txt tar_file03.txt
复制代码
4. 将文件进行改名
在同一目录下将文件进行改名,例如在target/目录,将sou_file01.txt改名为aa_test.txt
- [root@jeven ~]# cd /target/
- [root@jeven target]# mv sou_file01.txt aa_test.txt
- [root@jeven target]# ls /target/
- aa_test.txt tar_file01.txt tar_file02.txt tar_file03.txt
复制代码
5. 将目录的所有文件转移到目标目录
将/source/目录的所有文件,转移到目标目录 /target/
- [root@jeven ~]# mv /source/* /target/
- [root@jeven ~]# ls /target/
- aa_test.txt sou_file02.txt sou_file03.txt tar_file01.txt tar_file02.txt tar_file03.txt
复制代码
6. 移动多个文件到目标目标
将/test/目录下的file01和file02文件转移到目标目录/target
- [root@jeven ~]# mv /test/file01 /test/file02 /target/
- [root@jeven ~]# ls /target/
- aa_test.txt file01 file02 sou_file02.txt sou_file03.txt tar_file01.txt tar_file02.txt tar_file03.txt
复制代码
7. 移动目录
将/test目录移动到/target目录
- [root@jeven ~]# mv /test/ /target/
- [root@jeven ~]# ls /target/
- aa_test.txt file01 file02 sou_file02.txt sou_file03.txt tar_file01.txt tar_file02.txt tar_file03.txt test
复制代码
8. 覆盖文件
在/source目录下,创建两个文件,并写入内容。
- root@jeven ~]# cd /source/
- [root@jeven source]# ls
- [root@jeven source]# echo 11 > aa.txt
- [root@jeven source]# echo 22 > bb.txt
- [root@jeven source]# cat aa.txt
- 11
- [root@jeven source]# cat bb.txt
- 22
复制代码
当源文件aa.txt和目标文件bb.txt都存在时,源文件会变成目标文件bb.txt,并覆盖原来的bb.txt文件。
- [root@jeven source]# mv aa.txt bb.txt
- mv: overwrite ‘bb.txt’? yes
- [root@jeven source]# ls
- bb.txt
- [root@jeven source]# cat bb.txt
- 11
复制代码
四、mv的日常使用
1. 提示是否覆盖文件
在当覆盖文件时,提示是否覆盖文件,默认mv命令加了-I
- [root@jeven source]# mv -i aa.txt bb.txt
- mv: overwrite ‘bb.txt’? yes
- [root@jeven source]# ls
- bb.txt
- [root@jeven source]# cat bb.txt
- 11
复制代码- [root@jeven source]# alias |grep mv
- alias mv='mv -i'
复制代码
2. 覆盖文件时对源文件备份
使用mv -b,在覆盖文件时,对源文件进行备份。
- [root@jeven source]# echo 11 > aa.txt
- [root@jeven source]# echo 22 > bb.txt
- [root@jeven source]# mv -b aa.txt bb.txt
- mv: overwrite ‘bb.txt’? yes
- [root@jeven source]# ls
- bb.txt bb.txt~
- [root@jeven source]# cat bb.txt
- 11
- [root@jeven source]# cat bb.txt~
- 22
复制代码
3. 强制覆盖文件
使用mv -f 强制覆盖文件。
4. 打印转移信息
使用mv -v打印移动信息
- [root@jeven source]# mv -v /source/bb.txt /target/
- ‘/source/bb.txt’ -> ‘/target/bb.txt’
复制代码
5. 源文件比目标文件新时才执行更新
当源文件是最新更新时,才可以覆盖目标文件。
- [root@jeven source]# echo 11 > aa.txt
- [root@jeven source]# echo 22 > bb.txt
- [root@jeven source]# mv -uv aa.txt bb.txt
- [root@jeven source]# ls
- aa.txt bb.txt
复制代码
- [root@jeven source]# echo ee > aa.txt
- [root@jeven source]# mv -uv aa.txt bb.txt
- mv: overwrite ‘bb.txt’? yes
- ‘aa.txt’ -> ‘bb.txt’
- [root@jeven source]# ls
- bb.txt
- [root@jeven source]# cat bb.txt
- ee
复制代码
五、注意事项
在Linux中使用mv命令时,有几个注意事项可以帮助你更安全、有效地操作文件和目录:
-
权限问题:确保你有足够的权限去移动或重命名文件。如果没有,mv命令会失败,除非使用了sudo(对于需要提升权限的操作)。 -
覆盖风险:默认情况下,如果你尝试移动一个文件到一个已存在的同名文件的位置,mv会直接覆盖目标文件,不会询问。为了避免意外覆盖,可以使用-i(interactive)选项,这样在覆盖前会提示确认。 -
备份原文件:使用-b选项可以在覆盖文件前自动创建一个备份,这对于保护重要数据很有帮助。 -
移动与重命名的区别:当第二个参数是文件名时,视为重命名操作;当是目录名时,则是移动操作。确保正确指定目标以达到预期效果。 -
跨文件系统移动:跨文件系统移动文件时,mv实际上是先复制再删除原文件。这意味着如果操作过程中出现错误(如空间不足),可能会丢失原文件。 -
目录操作:移动目录时,记得在目标路径后加斜杠(/),这可以避免在目标目录不存在时意外地将源目录作为目标目录的一个子目录移动进去。 -
批量操作:可以同时移动多个文件或目录,只需在源文件列表中列出它们,但目标必须是一个已存在的目录。 -
符号链接:移动符号链接会移动链接本身而不是链接指向的文件。若要移动实际文件,需要使用-L选项来跟踪并移动链接指向的目标。
|