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開發學習路線圖

也但願有小夥伴能加入我,把這份電子書作得更完美!

有收穫?但願老鐵們來個三連擊,給更多的人看到這篇文章

推薦閱讀:

相關文章
相關標籤/搜索