
mv(move)是Linux系统中用于移动文件和目录或对其进行重命名的基本命令。与复制(cp)不同,mv直接更改文件的位置或名称,而不创建新的数据副本,因此操作速度更快且不占用额外磁盘空间。
mv命令在文件系统中通过修改目录项实现移动操作,在同一文件系统内移动时几乎瞬时完成,跨文件系统移动时则实际执行复制和删除操作。掌握mv对于日常文件管理、脚本编写、备份整理等场景至关重要。
1. 基本语法
| 命令 | 说明 |
|---|
mv [options] source dest | |
mv [options] source... directory | |
mv file.txt newname.txt | |
mv dir1 dir2 | |
2. 移动文件
| 命令 | 说明 |
|---|
mv file.txt /tmp/ | |
mv file1.txt file2.txt /backup/ | |
mv *.log /var/log/archive/ | |
mv /src/file.txt /dest/newname.txt | |
mv /home/user/*.pdf ./ | |
mv /tmp/*.tmp ~/trash/ | |
3. 移动目录
| 命令 | 说明 |
|---|
mv project/ /opt/ | |
mv olddir newdir | |
mv dir1 dir2 /dest/ | |
mv /src/dir /dest/dir-new | |
mv */ ./archive/ | |
4. 覆盖控制
控制目标文件已存在时的行为:
| 命令 | 说明 |
|---|
mv -i file.txt /dest/ | |
mv -n file.txt /dest/ | |
mv -f file.txt /dest/ | |
mv -u file.txt /dest/ | |
mv -v -i file.txt /dest/ | |
5. 备份与安全
保护目标文件,移动前自动创建备份:
| 命令 | 说明 |
|---|
mv -b file.txt /dest/ | |
mv --backup=numbered file.txt /dest/ | |
mv -S .bak -b file.txt /dest/ | |
mv -v file.txt /dest/ | |
mv -vn file.txt /dest/ | |
备份示例:
$ ls dest/
oldfile.txt
$ mv -b file.txt dest/
$ ls dest/
file.txt oldfile.txt~
6. 实用组合模式
| 命令 | 说明 |
|---|
mv -- *.txt archive/ | |
mv "My File.txt" /dest/ | |
find . -maxdepth 1 -name '*.tmp' -exec mv -t /tmp/archive {} + | |
mv /path/file{,.bak} | |
mv $(ls -t | head -5) ./latest/ | |
for f in *.jpg; do mv "$f" "${f%.jpg}.png"; done | |
7. 批量重命名技巧
| 命令 | 说明 |
|---|
for f in *.txt; do mv "$f" "${f%.txt}.md"; done | |
rename 's/old/new/' *.txt | |
ls | grep "pattern" | xargs -I {} mv {} new_{} | |
for f in *; do mv "$f" "$(echo $f | tr 'A-Z' 'a-z')"; done | |
for f in *; do mv "$f" "${f// /_}"; done | |
8. 跨文件系统移动
当源和目标位于不同文件系统时,mv的行为会改变:
| 场景 | 说明 |
|---|
| |
| |
mv /home/file /mnt/usb/ | |
cp -r /src /dest && rm -rf /src | |
9. 常用选项速查
10. 与cp命令对比
11. 故障排查
| 问题 | 解决方法 |
|---|
| No such file or directory | |
| Permission denied | |
| Wrong file overwritten | |
| 通配符不匹配隐藏文件 | *默认不匹配以.开头的文件,使用.*或shopt -s dotglob |
文件名以-开头导致报错 | 使用--分隔选项和文件名:mv -- -file.txt dest/ |
| 文件名含空格导致问题 | 使用引号包围文件名:mv "my file.txt" dest/ |
| mv提示cross-device link | |
| 批量移动后部分文件丢失 | 先用-v预览;检查目标目录是否存在;考虑使用-t选项 |
温馨提示: mv是高风险操作,建议遵循以下原则:1)使用-i或-n保护重要文件;2)批量操作前先用ls或find确认匹配范围;3)移动前确认目标目录存在;4)跨文件系统移动大文件时,考虑使用cp+rm以便断点续传。在脚本中使用mv时,务必检查返回值($?)确保操作成功。使用-v选项可以在移动大量文件时提供进度反馈。
关注公众号(haopython),请回复: LLTMV