Linux下mv命令高级用法

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

1. 基本用法

  1. 移动一个/多个文件;
  2. 移动一个/多个目录;
  3. 重命名文件/目录。

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

2. 打印操做信息

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

[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 命令也不会提示而直接替换原来的文件。而这样的操做,有时可能会形成灾难性的后果。学习

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

[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 选项。code

[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

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

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


最后,最近不少小伙伴找我要Linux学习路线图,因而我根据本身的经验,利用业余时间熬夜肝了一个月,整理了一份电子书。不管你是面试仍是自我提高,相信都会对你有帮助!

免费送给你们,只求你们金指给我点个赞!

电子书 | Linux开发学习路线图

也但愿有小伙伴能加入我,把这份电子书作得更完美!

有收获?但愿老铁们来个三连击,给更多的人看到这篇文章

推荐阅读:

相关文章
相关标签/搜索