做什么
移动文件 / 目录到新位置,或者改名(其实是同一件事)。
常用参数
| 参数 | 含义 |
|---|---|
-i |
覆盖前问 |
-f |
强制(不问) |
-n |
不覆盖 |
-u |
只移动新的 / 改过的 |
-v |
显示过程 |
-b |
覆盖时备份 |
实战
mv old.txt new.txt # 改名
mv file.txt /tmp/ # 移动
mv file.txt /tmp/new.txt # 移动 + 改名
mv *.log /var/log/ # 批量移动
mv -v src/* dest/ # 显示过程
改名一组文件(用 rename 或 for 循环)
# 改后缀
for f in *.jpeg; do mv "$f" "${f%.jpeg}.jpg"; done
# rename 工具(Perl 版,多数发行版自带)
rename 's/\.jpeg$/.jpg/' *.jpeg
# rename 工具(C 版,简单)
rename .jpeg .jpg *.jpeg
⚠ 两种 rename 在不同发行版默认装的是不同版本,用前看 man rename 确认。
坑
- 同文件系统 mv 是瞬间的——只改 inode 指针,不复制数据
- 跨文件系统 mv = cp + rm——可能耗时长,断电会丢
- 大文件跨盘移动时建议用
rsync+ 验证后再删源