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
相關文章
相關標籤/搜索