看了這篇文章!我才知道 Linux mv 命令的真正使用方法
衆所周知,在 Linux 系統中,一切皆文件!
所以,對於文件的操作與管理在 Linux 系統中顯得尤其重要,今天,就給大家介紹一個文件管理命令 mv 。
本文主要講解 mv 命令的具體用法與實際中應該注意的點,讓我們一起通過**理論 + 實例 **的形式,一起來研究和學習 mv 命令。
需要學習更多關於 Linux 系統命令的讀者們,可以參閱往期系列文章《每天學習一個 Linux 命令》。
mv 簡介
mv 命令是 move 的縮寫, 也是 Linux 系統下常用的命令之一,mv 命令常常用於移動、重命名文件或目錄。或者將文件從一個目錄移動到另一個目錄中,如果將一個文件移動到一個已經存在的目標文件中,這時目標文件的內容會被此文件內容覆蓋。
如果源爲文件,而目標爲目錄,mv 將進行文件的位置移動。如果源爲目錄,則目標只能是目錄(不能爲文件),mv 將進行目錄的重命令名。
mv 命令移動文件時,在目標不同的情況下,會有下面 4 種不同的結果:
-
如果目標是指定的某一個具體路徑,則源文件會被移動到此目錄下,且文件名不變。
-
如果目標不是目錄,則源文件名(只能有一個)會變爲此目標文件名,如果存在同名文件,則會覆蓋己存在的同名文件。
-
如果源文件和目標文件在同一個目錄下,mv 的作用就是修改文件名。
-
當目標是目錄時,源文件或目錄可以是多個,這時所有的源文件都會被移至目標目錄下。且所有的文件都將保留以前的文件名。
語法格式
mv [選項] 源文件或目錄 目標文件或目錄
mv [options] source destination
選項說明
-b #當目標文件存在時,覆蓋之前創建一個備份
-f #如果移動的文件或目錄與目標重複,則直接覆蓋(無需確認)
-i #交互式操作,覆蓋前會提示用戶進行確認操作,用戶通過輸入Y/N來確認是否覆蓋
-u #若目標文件已存在,且與需移動的文件同名,只有在源文件比目標文件較新時,纔會更新目標文件
-t #指定mv的目標目錄,此選項使用於移動多個文件到一個目錄的情況,目標文件在前,源文件在後。
-S<後綴>:#爲備份文件指定(自定義的)後綴
-n #不覆蓋任何現有文件
-T #將目標當作普通文件,而不是目錄
-v #詳細輸出命令的執行過程信息
應用舉例
重命名文件(目錄)
命令格式:mv 源文件 目標文件 或 mv 源目錄 目標目錄
注意:我們在使用這個命令時必須保證源文件(目錄)和目標文件(目錄)在同一個目錄下,並且目標文件(目錄)不存在,否則使用這條命令的效果就由重命名變成文件(目錄)的移動了。
首先,我們創建測試需要的文件與目錄
[root@CentOS7-1 mv]# ll
total 0
[root@CentOS7-1 mv]# touch mvfiles
[root@CentOS7-1 mv]# mkdir mvdir
[root@CentOS7-1 mv]# ll
total 0
drwxr-xr-x 2 root root 6 Jan 8 09:03 mvdir
-rw-r--r-- 1 root root 0 Jan 8 09:02 mvfiles
進行重命名操作
[root@CentOS7-1 mv]# mv mvfiles mvfilessssss
[root@CentOS7-1 mv]# mv mvdir mvdirectory
[root@CentOS7-1 mv]# ll
total 0
drwxr-xr-x 2 root root 6 Jan 8 09:03 mvdirectory
-rw-r--r-- 1 root root 0 Jan 8 09:02 mvfilessssss
如果需要命令執行的過程,可以加上參數-v
[root@CentOS7-1 mv]# mv -v mvfilessssss mvfiles
‘mvfilessssss’ -> ‘mvfiles’
[root@CentOS7-1 mv]# mv -v mvdirectory mvdir
‘mvdirectory’ -> ‘mvdir’
同時移動單個或多個文件(目錄)
命令格式:mv 源文件(目錄)1 源文件(目錄)2 目標目錄 或 mv *文件(目錄) 目標目錄
同時移動多個文件(目錄)有兩種方法:
-
第一種命令格式可以把多個文件(目錄)同時移動到目標目錄下,文件(目錄)之間以空格分隔
-
第二種命令格式採用通配符將具有類似文件名或類型等的文件(目錄)同時移動到目標目錄下
注意:目標目錄下如果存在相同的文件名或目錄名,容易誤操作將同名文件或目錄覆蓋。
創建測試用的文件和目錄
[root@CentOS7-1 mv]# touch 1.txt 2.txt 3.txt
[root@CentOS7-1 mv]# mkdir 1 2 3
[root@CentOS7-1 mv]# ll
total 0
drwxr-xr-x 2 root root 6 Jan 8 09:20 1
-rw-r--r-- 1 root root 0 Jan 8 09:19 1.txt
drwxr-xr-x 2 root root 6 Jan 8 09:20 2
-rw-r--r-- 1 root root 0 Jan 8 09:19 2.txt
drwxr-xr-x 2 root root 6 Jan 8 09:20 3
-rw-r--r-- 1 root root 0 Jan 8 09:19 3.txt
移動文件
[root@CentOS7-1 mv]# mv -v 1.txt 2.txt 3.txt /root/mv1/
‘1.txt’ -> ‘/root/mv1/1.txt’
‘2.txt’ -> ‘/root/mv1/2.txt’
‘3.txt’ -> ‘/root/mv1/3.txt’
[root@CentOS7-1 mv]# ll /root/mv1/
total 0
-rw-r--r-- 1 root root 0 Jan 8 09:19 1.txt
-rw-r--r-- 1 root root 0 Jan 8 09:19 2.txt
-rw-r--r-- 1 root root 0 Jan 8 09:19 3.txt
[root@CentOS7-1 mv]# ll
total 0
drwxr-xr-x 2 root root 6 Jan 8 09:20 1
drwxr-xr-x 2 root root 6 Jan 8 09:20 2
drwxr-xr-x 2 root root 6 Jan 8 09:20 3
-rw-r--r-- 1 root root 0 Jan 8 09:24 test.txt
[root@CentOS7-1 mv]# ll /root/mv1/
total 0
-rw-r--r-- 1 root root 0 Jan 8 09:19 1.txt
-rw-r--r-- 1 root root 0 Jan 8 09:19 2.txt
-rw-r--r-- 1 root root 0 Jan 8 09:19 3.txt
-rw-r--r-- 1 root root 0 Jan 8 09:25 test.txt
[root@CentOS7-1 mv]# mv -nv test.txt /root/mv1/
[root@CentOS7-1 mv]# ll /root/mv1/
total 0
-rw-r--r-- 1 root root 0 Jan 8 09:19 1.txt
-rw-r--r-- 1 root root 0 Jan 8 09:19 2.txt
-rw-r--r-- 1 root root 0 Jan 8 09:19 3.txt
-rw-r--r-- 1 root root 0 Jan 8 09:25 test.txt
交互式覆蓋文件
這個操作只需要添加一個參數(-i
)即可
[root@CentOS7-1 mv]# mv test.txt -v -i /root/mv1/
mv: overwrite ‘/root/mv1/test.txt’? y
‘test.txt’ -> ‘/root/mv1/test.txt’
[root@CentOS7-1 mv]# ll /root/mv1/
total 0
-rw-r--r-- 1 root root 0 Jan 8 09:19 1.txt
-rw-r--r-- 1 root root 0 Jan 8 09:19 2.txt
-rw-r--r-- 1 root root 0 Jan 8 09:19 3.txt
-rw-r--r-- 1 root root 0 Jan 8 09:24 test.txt
僅當源文件(目錄)較新時才覆蓋
-u
參數,來測試舊文件是否會覆蓋掉新文件:
[root@CentOS7-1 mv]# mv -v -u /root/mv1/test.txt ./
[root@CentOS7-1 mv]# ll
total 0
drwxr-xr-x 2 root root 6 Jan 8 09:20 1
drwxr-xr-x 2 root root 6 Jan 8 09:20 2
drwxr-xr-x 2 root root 6 Jan 8 09:20 3
-rw-r--r-- 1 root root 0 Jan 8 09:36 test.txt
結果表明並沒有覆蓋掉新文件,接下來,我們測試僅當源文件(目錄)較新時才覆蓋這個功能。
[root@CentOS7-1 mv]# mv -v -u ./test.txt /root/mv1/
mv: overwrite ‘/root/mv1/test.txt’? y
‘./test.txt’ -> ‘/root/mv1/test.txt’
[root@CentOS7-1 mv]# ll /root/mv1/
total 0
-rw-r--r-- 1 root root 0 Jan 8 09:19 1.txt
-rw-r--r-- 1 root root 0 Jan 8 09:19 2.txt
-rw-r--r-- 1 root root 0 Jan 8 09:19 3.txt
-rw-r--r-- 1 root root 0 Jan 8 09:36 test.txt
覆蓋文件前創建備份
[root@CentOS7-1 mv]# cat test1.txt
1
[root@CentOS7-1 mv]# cat test2.txt
2
如果 test2.txt 存在,原來的文件會被備份
[root@CentOS7-1 mv]# mv -v -b test1.txt test2.txt
mv: overwrite ‘test2.txt’? y
‘test1.txt’ -> ‘test2.txt’ (backup: ‘test2.txt~’)
[root@CentOS7-1 mv]# ll
total 12
-rw-r--r-- 1 root root 2 Jan 8 09:49 test2.txt
-rw-r--r-- 1 root root 2 Jan 8 09:49 test2.txt~
-rw-r--r-- 1 root root 2 Jan 8 09:49 test3.txt
[root@CentOS7-1 mv]# cat test2.txt
1
[root@CentOS7-1 mv]# cat test2.txt~
2
--suffix=xxx
來自定義文件的後綴名:
[root@CentOS7-1 mv]# cat test2.txt
1
[root@CentOS7-1 mv]# cat test3.txt
3
[root@CentOS7-1 mv]# mv -v -b --suffix=.bak test2.txt test3.txt
mv: overwrite ‘test3.txt’? y
‘test2.txt’ -> ‘test3.txt’ (backup: ‘test3.txt.bak’)
[root@CentOS7-1 mv]# cat test3.txt
1
[root@CentOS7-1 mv]# cat test3.txt.bak
3
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/0bmGS8Aofqs1g4FkcFMvaQ