mv(move)是 Linux 檔案系統操作的核心指令,既能移動檔案/目錄,也能重命名。掌握其參數與行為細節,能避免資料誤覆蓋與路徑錯誤。
基本語法
mv [選項] 來源 暸標
常用選項
| 選項 | 完整名稱 | 行為 |
-f | --force | 強制覆蓋,不提示(預設行為) |
-i | --interactive | 覆蓋前逐一確認,建議別名 alias mv='mv -i' |
-n | --no-clobber | 不覆蓋既有檔案,靜默跳過 |
-v | --verbose | 顯示每步操作詳情 |
-u | --update | 僅在來源比目標新、或目標不存在時移動 |
-b | --backup | 覆蓋前備份既有檔案(預設加 ~ 後綴) |
行為對照表:來源與目標類型組合
| 指令形式 | 結果 |
mv file1 file2 | 重命名 file1 → file2(同目錄) |
mv file1 dir/ | 將 file1 移入 dir/ 目錄 |
mv dir1 dir2 | 若 dir2 存在 → 移入 dir2/dir1;不存在 → 重命名 dir1 → dir2 |
mv dir1 file1 | 錯誤:目標為檔案無法移入目錄 |
實戰範例
# 1. 重命名單一檔案
mv m1.c m2.c
# 2. 移動整個目錄樹到當前目錄(. 代表當前目錄)
mv /usr/student/* .
# 3. 批次重命名:將 *.log 改為 *.log.bak(需搭配迴圈)
for f in *.log; do mv "$f" "${f}.bak"; done
# 4. 安全移動:覆蓋前確認、顯示過程
mv -iv source.txt /backup/
# 5. 僅更新較新檔案(同步備份常用)
mv -uv /data/latest/* /backup/daily/
mv vs cp 核心差異
- mv:修改目錄項(inode 不變),同檔案系統瞬間完成;跨檔案系統則退化為「複製+刪除」。檔案總數不變。
- cp:建立新 inode 複製資料,檔案總數增加。
進階技巧
- 防誤刪別名:在
~/.bashrc 加入 alias mv='mv -i' alias cp='cp -i' alias rm='rm -i'。
- 大量檔案移動效能:同檔案系統下
mv 僅更新元資料,極快;跨檔案系統考慮 rsync -a --remove-source-files 可斷點續傳。
- 撤銷移動:無直接撤銷,若未覆蓋可
mv dest src 移回;若已覆蓋需從備份恢復。