mv 命令是 Linux 系统中最基本和常用的文件操作命令之一,主要用于移动文件或目录,也可以用于重命名文件。它是 "move" 的缩写,能够高效地在文件系统中重新定位文件和目录。
mv [选项] 源文件 目标文件
或者移动多个文件:
mv [选项] 源文件... 目标目录
# 将文件从 oldname.txt 重命名为 newname.txt
mv oldname.txt newname.txt
# 重命名并显示详细信息
mv -v oldfile.txt newfile.txt
# 输出:'oldfile.txt' -> 'newfile.txt'
# 移动单个文件到目录
mv file.txt /path/to/destination/
# 移动多个文件到目录
mv file1.txt file2.txt file3.txt /target/directory/
# 使用通配符移动多个文件
mv *.jpg /path/to/images/
# 移动整个目录
mv old_directory/ new_directory/
# 移动目录到其他位置
mv my_project/ /home/user/projects/
# 覆盖前提示确认
mv -i important_file.txt backup/
# 输出:mv: overwrite 'backup/important_file.txt'?
# 强制覆盖,不提示
mv -f file.txt destination/
# 覆盖前创建备份
mv -b old.txt new.txt
# 如果 new.txt 存在,会创建 new.txt~ 作为备份
# 只在新文件更新时才移动
mv -u new_data.txt archive/
# 整理下载目录
mkdir -p ~/Downloads/{images,docs,archives}
mv ~/Downloads/*.jpg ~/Downloads/*.png ~/Downloads/images/
mv ~/Downloads/*.pdf ~/Downloads/*.doc ~/Downloads/docs/
mv ~/Downloads/*.zip ~/Downloads/*.tar.gz ~/Downloads/archives/
# 清理临时文件
mkdir temp_backup
mv *.tmp *.log temp_backup/
# 重命名项目文件
mv project_old/ project_new/
# 移动源代码文件
mv *.c src/
mv *.h include/
# 备份配置文件
mv config.conf config.conf.backup
mv new_config.conf config.conf
# 日志轮转操作
mv app.log app.log.old
touch app.log
# 或者使用时间戳
mv server.log server.log.$(date +%Y%m%d)
# 批量添加前缀
for file in *.txt; do
mv "$file" "backup_$file"
done
# 批量更改扩展名
for file in *.jpeg; do
mv "$file" "${file%.jpeg}.jpg"
done
# 使用 rename 命令进行复杂重命名(需要安装)
rename 's/old/new/' *.txt
# 将多个文件移动到指定目录
mv -t /target/directory/ file1.txt file2.txt file3.txt
# 这在脚本中特别有用
files=(*.txt)
mv -t /backup/ "${files[@]}"
# 使用数字备份
mv --backup=numbered important.txt backup/
# 如果 backup/important.txt 存在,会创建 backup/important.txt.~1~
# 自定义备份后缀
mv -b -S .bak file.txt destination/
# 如果目标文件存在,会创建 destination/file.txt.bak
#!/bin/bash
# 安全的文件移动脚本
backup_file() {
local src=$1
local dest=$2
if [ -e "$dest" ]; then
local backup_name="${dest}.$(date +%Y%m%d_%H%M%S).bak"
echo "备份已存在的文件: $dest -> $backup_name"
mv "$dest" "$backup_name"
fi
mv -v "$src" "$dest"
}
# 使用函数
backup_file "new_config.conf" "/etc/app/config.conf"
# 移动包含空格的文件
mv "file with spaces.txt" "new name with spaces.txt"
# 移动以破折号开头的文件
mv -- -filename.txt normal_name.txt
# 或者
mv ./-filename.txt normal_name.txt
# 移动包含特殊字符的文件
mv "file*with?special[chars].txt" simple_name.txt
# 在 ~/.bashrc 中设置别名,默认使用交互模式
alias mv='mv -i'
# 重要操作前先检查
ls -l source_file.txt
ls -l destination_directory/
mv -i source_file.txt destination_directory/
# 在Git仓库中操作,可以回滚错误的重命名
git mv oldname.txt newname.txt
git commit -m "重命名文件"
# 如果出错可以回滚
git reset --hard HEAD
#!/bin/bash
# 安全的mv包装脚本
safemv() {
if [ $# -lt 2 ]; then
echo "用法: safemv 源文件 目标文件"
return 1
fi
local src=$1
local dest=$2
# 检查源文件是否存在
if [ ! -e "$src" ]; then
echo "错误: 源文件 '$src' 不存在"
return 1
fi
# 如果目标是目录,检查是否可写
if [ -d "$dest" ]; then
if [ ! -w "$dest" ]; then
echo "错误: 目标目录 '$dest' 不可写"
return 1
fi
fi
# 执行移动操作
mv -i "$@"
}
| 命令 | 用途 | 特点 |
|---|---|---|
mv |
移动/重命名文件 | 快速,保留文件属性,在同一文件系统内是原子操作 |
cp |
复制文件 | 创建文件副本,源文件和目标文件同时存在 |
rm |
删除文件 | 永久删除文件,不可恢复(除非使用特殊工具) |
rename |
批量重命名 | 基于正则表达式的批量重命名 |
ln |
创建链接 | 创建文件链接,不移动实际数据 |
mv -i 作为默认别名可以防止意外覆盖文件mv -f 可以避免交互提示mv -v 可以查看详细的操作过程strace mv file1 file2 可以查看 mv 命令的系统调用ls -i 检查文件的 inode 编号