Linux系统之mv命令的基本使用
一、mv命令介绍
1. mv命令简介
2. mv命令的使用结果
- mv命令可以用来将源文件移至一个目标文件中,或将一组文件移至一个目标目录中。源文件被移至目标文件有不同的结果:
二、mv命令的使用帮助
1. 在命令行的帮助信息
[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常用选项
--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. 将源目录文件复制到目标目录
[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. 将文件进行改名
[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. 将目录的所有文件转移到目标目录
[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. 移动多个文件到目标目标
[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. 移动目录
[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. 覆盖文件
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
[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. 提示是否覆盖文件
[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. 覆盖文件时对源文件备份
[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 aa.txt bb.txt
4. 打印转移信息
[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
选项来跟踪并移动链接指向的目标。