Linux下mv命令高级用法

mv 也是 Linux 下一个使用频率很是高的命令,但除了一些基本用法,你还知道它的哪些高级用法呢?centos

1. 基本用法

  1. 移动一个/多个文件;bash

  2. 移动一个/多个目录;ui

  3. 重命名文件/目录。spa

这些都是很基本的用法,无需赘述。下面介绍一些更高级的用法。code

2. 打印操做信息

咱们若是只移动一两个或少数几个文件/目录时,暂且还能够去目标位置去查看文件是否移动成功。但若是有千百个文件呢?如何在不去目标位置查看的状况下知道咱们的操做是否已经成功了呢?咱们能够加上 -v 选项。cdn

[alvin@VM_0_16_centos mv_test]$ mv -v *.txt /home/alvin/test/mv_test/des/
‘file1.txt’ -> ‘/home/alvin/test/mv_test/des/file1.txt’
‘file2.txt’ -> ‘/home/alvin/test/mv_test/des/file2.txt’
‘file3.txt’ -> ‘/home/alvin/test/mv_test/des/file3.txt’
‘file4.txt’ -> ‘/home/alvin/test/mv_test/des/file4.txt’
‘file5.txt’ -> ‘/home/alvin/test/mv_test/des/file5.txt’复制代码

固然,此方法一样适用于移动目录。开发

3. 使用交互模式

在默认状况下,咱们移动文件/目录时,不会有任何提示。若是在目标位置咱们有个相同名字的文件/目录,mv 命令也不会提示而直接替换原来的文件。而这样的操做,有时可能会形成灾难性的后果。it

在这种状况下,咱们能够加一个 -i 选项,当目标位置有相同名字的文件时,它将会进行提示。若是你确认要覆盖目标文件,键入 y 便可。io

[alvin@VM_0_16_centos mv_test]$ mv -i file1.txt /home/alvin/test/mv_test/des/
mv: overwrite ‘/home/alvin/test/mv_test/des/file1.txt’? y复制代码

4. 不覆盖同名文件

若是目标位置有同名文件,咱们不但愿它被覆盖,能够加上 -n 选项。class

[alvin@VM_0_16_centos mv_test]$ ll *.txt des/*.txt
-rw-rw-r-- 1 alvin alvin 0 Feb  8 17:26 file2.txt
-rw-rw-r-- 1 alvin alvin 0 Feb  8 17:35 file3.txt
-rw-rw-r-- 1 alvin alvin 0 Feb  8 17:26 des/file1.txt
-rw-rw-r-- 1 alvin alvin 0 Feb  8 17:27 des/file2.txt
[alvin@VM_0_16_centos mv_test]$ mv -nv *.txt /home/alvin/test/mv_test/des/
‘file3.txt’ -> ‘/home/alvin/test/mv_test/des/file3.txt’ #目标位置没有file3.txt文件,因此成功移动
[alvin@VM_0_16_centos mv_test]$ ls
des  file2.txt复制代码

5. 使用更新选项

当目标位置有同名文件/目录时,咱们只但愿源文件比目标文件时间戳更新时,才进行覆盖,不然不执行。这种状况下,咱们可使用 -u 选项。

[alvin@VM_0_16_centos mv_test]$ ll *.txt des/*.txt
-rw-rw-r-- 1 alvin alvin 0 Feb  8 17:26 file1.txt   #源文件比目标文件时间戳更新
-rw-rw-r-- 1 alvin alvin 0 Feb  8 17:26 file2.txt   #源文件比目标文件时间戳更旧
-rw-rw-r-- 1 alvin alvin 0 Feb  8 16:53 des/file1.txt
-rw-rw-r-- 1 alvin alvin 0 Feb  8 17:27 des/file2.txt
[alvin@VM_0_16_centos mv_test]$ mv -uv *.txt /home/alvin/test/mv_test/des/
‘file1.txt’ -> ‘/home/alvin/test/mv_test/des/file1.txt’ #只有时间戳更新的文件被替换
[alvin@VM_0_16_centos mv_test]$ ls
des  file2.txt复制代码

6. 覆盖前建立备份

目标位置已经有了同名文件,若是直接覆盖总以为有点不踏实,万一如今的决定是错的呢?有没可能在覆盖以前,先将目标文件进行备份?答案是确定的,加一个 -b 选项便可。

[alvin@VM_0_16_centos mv_test]$ mv -bv *.txt /home/alvin/test/mv_test/des/
‘file1.txt’ -> ‘/home/alvin/test/mv_test/des/file1.txt’ (backup: ‘/home/alvin/test/mv_test/des/file1.txt~’)
‘file2.txt’ -> ‘/home/alvin/test/mv_test/des/file2.txt’ (backup: ‘/home/alvin/test/mv_test/des/file2.txt~’)
[alvin@VM_0_16_centos mv_test]$ ll des/
total 0
-rw-rw-r-- 1 alvin alvin 0 Feb  8 17:41 file1.txt
-rw-rw-r-- 1 alvin alvin 0 Feb  8 17:26 file1.txt~
-rw-rw-r-- 1 alvin alvin 0 Feb  8 17:26 file2.txt
-rw-rw-r-- 1 alvin alvin 0 Feb  8 17:27 file2.txt~
-rw-rw-r-- 1 alvin alvin 0 Feb  8 17:35 file3.txt复制代码

能够看到,在覆盖以前,会将目标文件备份为一个带波浪号 ~ 的文件,同时细心的读者也会注意到,覆盖后文件与备份文件的时间戳不同。

以上就是 mv 命令的一些更高级用法,灵活使用的话会为本身的工做效率提升一个档次,在同事面前也更能装逼。


我是良许,世界500强外企 Linux 开发工程师,专业生产 Linux 干货。欢迎关注个人公众号「良许Linux」,回复「1024」获取最新最全的技术资料,回复「入群」进入高手如云技术交流群。

img
相关文章
相关标签/搜索