做什么

移动文件 / 目录到新位置,或者改名(其实是同一件事)。

常用参数

参数 含义
-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 + 验证后再删源