嗨!歡迎回到上班族的命令列生存手冊,上一個章節談到怎麼複製東西,這個章節來講怎麼移動檔案,還會說明怎麼「重新命名」。買一送一!準備好了嗎?讓我們開始吧!
就是 mv
指令!簡單的來說就是 $ mv <路徑> <其他路徑>
。舉個例子,我的目錄下有一個 hello.txt
,目標是將他移動到「上一層」資料夾,裡頭有一個 reallyCool 資料夾。
移動的方式是:
$ mv hello.txt ../reallyCool/
別忘了,mv
後面的指定檔案的位置,本質都是路徑,在打路徑時用 tab 鍵自動補全,也可以少打一些字。cp
指令也可以這樣做,因為也是路徑。
mv
也可以把一個檔案,移動到同一個地方,只是換個名稱…。 等一下,這個不就是「重新命名」嗎?
沒錯,重新命名就是這樣下的。
$ mv hello.txt world.txt
這樣子下,hello.txt
就會被重新命名成 world.txt
了,是不是很簡單粗暴呢?
另外一點,如果檔案移動的目的地有一個名子相同的檔案,就會被直接覆蓋過去,簡直是很黃、很暴力。怎麼樣讓他不要這麼粗魯呢?
跟 cp
一樣,可以善用 -i
進入互動模式(interactive mode)!
$ mv -i hello.txt world.txt
或是直接遇到一樣的檔案,就不要覆蓋,請用 -n
;或是今天很嗆,霸道總裁直接覆蓋,請加上 -f
。
mv
的用法有些和 cp
很類似,例如在上一章提到如果有類似的名子,可以用 *
號來做模糊選取類似的檔案。比如說有 xaa
、 xab
、xac
三個檔案,用以下方式可以一次移動這三個檔案到其他資料夾:
$ mv xa* ../otherFolder
如果真的吃錯藥輸入了互斥的命令,會發生什麼是?像是下了「就不要覆蓋」,又下了「直接給我覆蓋」,這種奇形怪狀的指令?
$ mv -n -f hello.txt world.txt
簡單!永遠都是後面那一個指令會被執行,所以上面的那個會是進行:直接給我覆蓋。
前幾章節,揭露網路寫手怎麼寫 Linux 指令教學文章,介紹過 man
指令,這個指令是指令的說明書。裡面就有介紹一些很有趣的使用方法,像是這些:
就是 -b
,
$ mv -b hello.txt somewhere/
移動過去的資料夾,已經有同名的檔案了,怎麼辦?用這個指令,會吧本來要被蓋過去的檔案,重新命名成「檔案~
」。一樣用上面的 hello.txt
作為範例,如果目的地也有 hello.txt
,則目的地原本的 hello.txt
會變成 hello.txt~
做了一個備份。
--exchange
沒想到這個指令也能兩兩交換對吧?我也是看 man
才知道的!假設目錄下有兩個檔案,分別是:hello.txt
和 world.txt
。加上 --exchange
可以讓他們兩兩交換。
$ mv --exchange hello.txt world.txt
上一個章節介紹 inode 時提到,目錄本身也是一個特殊的檔案,紀錄「檔案名稱」-> inode 的表格,也知道這個住戶資料是跟著某一個分割區的檔案系統的。
在同一個分割區移動檔案,根本不需要移動真正的檔案!只需要調整兩個目錄對應的表格內容即可,也就是說從目標檔案起始地的表格剪下:檔案名稱 -> inode 對應資訊,在目的地目錄的對應表之中貼上即可。
介紹了「複製」與「移動」檔案後,還有一個東西也需要題就是如何「創建」檔案,不過夜已經深了(以筆者寫的時間為準)就留到下回分解囉,下次見。