文章目錄
重新命名、覆蓋或移動檔案
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$ lsdemo2.txt
重新命名檔案
mv -i
$ lsdemo2.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 ccmv:是否覆蓋"cc",而不理會許可權模式0644 (rw-r--r--)? y$ lscc
此處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$ lsaa
與上面一樣,只不過此處加了 -f 選項,覆蓋時強制執行而不提示
mv 移動目錄
$ lsabc cde$ mv cde abc$ lsabc$ cd abc/$ lscde
此處將cde目錄移動到abc目錄中
mv 重新命名目錄
$ lsabc$ mv abc dir$ lsdir
此處將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 $ lstime1.txt time2.txt
確認修改時間再判斷是否覆蓋,此處time2.txt的修改時間比time1.txt的修改時間新,所以覆蓋失敗
mv -v
$ mv time1.txt -v time2.txt "time1.txt" -> "time2.txt"$ lstime2.txt
列出移動或覆蓋時的資訊
mv -b
$ mv -b aa.txt bb.txt$ lsbb.txt bb.txt~
覆蓋時進行備份,所備份的檔案尾部有個~
Tips
1.在Linux中,覆蓋和重新命名的概念幾乎是一樣的,沒有Windows中所謂的rename這一說法
2.選項你可以寫在任意位置,可以mv aa -v bb,也可以 mv -v aa bb,還可以 mv aa bb -v