命令简介

mv 命令是 Linux 系统中一个非常常用的命令,用于移动或重命名文件和目录。它可以将一个文件或目录从一个位置移动到另一个位置,也可以给文件或目录重新命名。

命令格式

1
mv [选项] 源文件/目录 目标位置

其中:

  • 源文件/目录:指定要移动或重命名的文件或目录的路径。
  • 目标位置: 指定要将文件或目录移动到的新位置,也可以是新的文件名或目录名。

参数说明

mv 命令本身没有太多选项,只有一些常用的选项,如下所示:

参数 说明 备注
-i 移动时若目标文件已存在,则会询问是否覆盖 交互式操作
-f 强制移动,不进行任何确认 需谨慎使用
-n 不覆盖任何已存在的文件或目录 -
-u 当源文件比目标文件新或目标文件不存在时,才执行移动操作 -
-v 显示移动进度 详细输出
-b 如果目标文件已存在,则创建备份文件 备份文件名格式为原文件名~

命令实例

基本用法

1.移动文件或目录

1
2
3
4
5
# 将文件 file.txt 移动到当前目录下的 newdir 目录中
mv file.txt newdir/

# 将目录 olddir 移动到 /tmp 目录下
mv olddir /tmp/

2.重命名文件或目录

1
2
3
4
5
# 将文件 old.txt 重命名为 new.txt
mv old.txt new.txt

# 将目录 olddir 重命名为 newdir
mv olddir newdir

3.移动多个文件或目录

1
2
3
4
5
# 将多个文件移动到指定目录
mv file1.txt file2.txt file3.txt /tmp/

# 将多个目录移动到指定位置
mv dir1 dir2 dir3 /path/to/destination/

4.覆盖(强制移动)目标文件

1
2
3
# 将文件 "file1" 移动到目录 "/home/user" 并覆盖同名文件;
# 强制将文件 "file1" 移动到目录 "/home/user",即使目标文件存在也不询问用户确认
mv -f file1 /home/user

5.使用通配符

1
2
3
4
5
# 将当前目录下所有 .txt 文件移动到 documents 目录中
mv *.txt documents/

# 将当前目录及子目录下所有 .log 文件移动到 logs 目录中
mv **/*.log logs/

扩展用法

  1. 移动并重命名

mv 命令可以在移动文件或目录的同时进行重命名操作。

1
2
3
4
5
# 将文件 old.txt 移动到 newdir 目录并重命名为 new.txt
mv old.txt newdir/new.txt

# 将目录 olddir 移动到 /tmp 目录下并重命名为 newdir
mv olddir /tmp/newdir

2.备份并移动

通过 -b 选项,可以在移动文件或目录时自动创建备份。

1
2
3
4
5
# 将文件 file.txt 移动到 newdir 目录,如果目标文件已存在则创建备份
mv -b file.txt newdir/

# 将目录 olddir 移动到 /tmp 目录下并重命名为 newdir,如果目标目录已存在则创建备份
mv -b olddir /tmp/newdir

3.使用高级通配符

除了常用的 *? 通配符外,mv 命令还支持其他高级通配符,如 []{} 等。

1
2
3
4
5
# 将当前目录下所有以 .txt 或 .log 结尾的文件移动到 documents 目录中
mv *.[tl][ox][gt] documents/

# 将当前目录下的 file1.txt、file2.txt 和 file3.txt 移动到 backup 目录中
mv file{1,2,3}.txt backup/

4.结合 grep 命令移动文件

1
2
# 将所有包含字符串 "hello" 的文件移动到目录 "/home/user"
mv $(grep -l "hello" *) /home/user

5.使用 mv 命令创建目录

1
2
# 创建名为 "newdir" 的目录
mv /dev/null newdir

高级用法

1.移动并执行命令

mv 命令可以与其他命令结合使用,实现更复杂的功能。

1
2
3
4
5
# 将当前目录下所有 .jpg 文件移动到 images 目录,并将它们重命名为 image001.jpg、image002.jpg 等格式
n=1; for file in *.jpg; do mv "$file" images/image$(printf "%03d" $n).jpg; ((n++)); done

# 将当前目录下所有 .php 文件移动到 web 目录,并替换所有文件中的 "old.com" 为 "new.com"
mv *.php web/ && sed -i 's/old.com/new.com/g' web/*.php

2.使用 mv 命令批量重命名文件

1
2
# 将所有名为 "file*" 的文件重命名为 "new-file*"
for file in file*; do mv "$file" "new-$file"; done

通过以上实例和扩展用法,相信你已经对 mv 命令有了更深入的了解。它不仅可以方便地移动和重命名文件或目录,还可以与其他命令结合使用,实现更多高级功能。如果你还有任何疑问或需要进一步探讨,欢迎随时向我提出。