簡明Linux命令行筆記:mv


重命名、覆蓋或移動文件

mv [options] existing-file new-filename

mv [options] existing-file-list directory

mv [options] existing-directory new-directory

 

參數

第一種形式:existing-file 是需要重命名的文件路徑; new-filename 是文件的新路徑名,用於重命名或覆蓋

第二種形式:existing-file 是需要移動的文件路徑列表; directory 是文件需要移動到的新目錄,用於移動

第三種形式:existing-file 是需要重命名的目錄路徑; new-directory 是目錄的新路徑名,用於重命名或覆蓋

 

選項

-b                如果已存在相同文件名,則覆蓋前進行備份

-f                 如果已存在相同文件名,而用戶不具有寫的權限,則強制覆蓋

-i                 如果已存在相同文件名,覆蓋前提示用戶進行確認

-u                比較原文件與目標文件修改時間,如果目標文件較新則不覆蓋

-v                列出所有被移動或重命名的文件

 

示例

mv

$ mv demo1.txt demo2.txt
$ ls
demo2.txt

重命名文件

 

mv -i

$ ls
demo2.txt  demo.txt
$ mv demo2.txt -i demo.txt 
mv:是否覆蓋"demo.txt"? y

對已存在的文件覆蓋前進行確認,y或Y開頭的字符串表示確定,其余任意字符表示否定

 

mv 不具備寫權限的文件名

$ ls -l
總用量 0
-rw-r--r-- 1 root root 0  1月  8 13:31 cc
-rw-r--r-- 1 siu  siu  0  1月  8 13:24 dd
$ mv dd cc
mv:是否覆蓋"cc",而不理會權限模式0644 (rw-r--r--)? y
$ ls
cc

此處cc的所有人和組都是root,而我當前用戶是siu,覆蓋時會要求確認

 

mv -f 不具備寫權限的文件名

$ ls -l
總用量 0
-rw-r--r-- 1 root root 0  1月  8 13:34 aa
-rw-r--r-- 1 siu  siu  0  1月  8 13:34 bb
$ mv bb -f aa
$ ls
aa

與上面一樣,只不過此處加了 -f 選項,覆蓋時強制執行而不提示

 

mv 移動目錄

$ ls
abc  cde
$ mv cde abc
$ ls
abc
$ cd abc/
$ ls
cde

此處將cde目錄移動到abc目錄中

 

mv 重命名目錄

$ ls
abc
$ mv abc dir
$ ls
dir

此處將abc目錄重命名為dir目錄,mv abc ../可將abc移動到父目錄,此處靈活多變

 

mv -u

$ ls -l
總用量 0
-rw-r--r-- 1 siu siu 0  1月  8 13:43 time1.txt
-rw-r--r-- 1 siu siu 0  1月  8 13:44 time2.txt
$ mv time1.txt -u time2.txt 
$ ls
time1.txt  time2.txt

確認修改時間再判斷是否覆蓋,此處time2.txt的修改時間比time1.txt的修改時間新,所以覆蓋失敗

 

mv -v

$ mv time1.txt -v time2.txt 
"time1.txt" -> "time2.txt"
$ ls
time2.txt

列出移動或覆蓋時的信息

 

mv -b

$ mv -b aa.txt bb.txt
$ ls
bb.txt  bb.txt~

覆蓋時進行備份,所備份的文件尾部有個~

 

Tips

1.在Linux中,覆蓋和重命名的概念幾乎是一樣的,沒有Windows中所謂的rename這一說法

2.選項你可以寫在任意位置,可以mv aa -v bb,也可以 mv -v aa bb,還可以 mv aa bb -v

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM