0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用mv和rename命令重命名文件

CHANBAEK 来源:myfreax 作者:myfreax 2023-01-17 17:43 次阅读

重命名文件和目录是您经常需要在Linux系统上执行的最基本任务之一。 重命名单个文件很简单,但一次重命名多个文件可能是一个挑战。

特别是对于刚接触Linux的用户而言。 您可以使用GUI文件管理器或命令行终端重命名文件。

mv命令重命名文件

mv命令用于将文件从一个位置重命名或移动到另一个位置。 这是mv命令的基本语法mv [OPTIONS] source destination

source源可以是一个或多个文件或目录,destination目标可以是单个文件或目录。

如果指定多个文件作为源source,则destination目标必须是目录。 在这种情况下,源文件将移动到目标目录。

如果将单个文件指定为源source,并且目标是目录,则该文件将移动到指定目录。

要重命名文件,您需要将单个文件指定为源source,并将单个文件指定为目标destination。 例如,以下mv命令将file1.txt重命名为file2.txt

mv file1.txt file2.txt

mv命令重命名多个文件

mv命令一次只能重命名一个文件,但它可以与其他命令一起使用,例如find命令在bash的for或while循环中重命名多个文件。

在以下示例中显示如何使用Bash for循环将重命名当前目录中的所有.html文件。 并将.html扩展名更改为.php

for f in *.html; do 
    mv -- "$f" "${f%.html}.php"
done

让我们解释一下语句的含义,最容易理解当然是最后的一行是shell/bash的关键词done表示循环的结束。

第一行创建一个for循环并遍历当前目录下以.html文件扩展名的文件。 第二行将.html文件移动并重命名文件。

并将文件的.html扩展名替换为.php${f%.html}使用的是shell参数扩展,.html将会匹配文件名原来扩展名,匹配的.html将会被删除。

从示例中可以看出,使用mv命令重命名多个文件并不是一件容易的事,因为它需要你很好地了解Bash脚本编程

mv命令除了可以和shell脚本的for循环整合之外。 我们还可以让mv结合find命令来实现与上面相同的功能。

我们还可以使用find命令搜索/查找当前目录下以.html结尾的文件。 然后使用-exec对每个文件运行指定命令。

-exec允许你指定要运行的命令,find命令将搜索的每个结果一个接一个传递-exec要运行的命令中。

你可在-exec运行的命令使用字符串{}获得正在处理的文件,如果你在使用find命令搜索文件使用绝对路径,字符串{}将是一个文件的绝对路径。

find . -depth -name "*.html" -exec sh -c 'f="{}"; mv -- "$f" "${f%.html}.php"' \\;

这里我们解释一下上面的find和-exec,mv是怎么配合使用的。

find命令之后.表示当前目录,find的-depth选项表示递归当前目录下的所有目录,-name选项表示要使用名称进行搜索。

"*.html"之所以加上双引号是防止*号被shell解释,*.html表示以.html作为扩展名的文件。

-exec sh -c表示-exec要运行命令是sh -c。 在类 Unix 操作系统上,sh是Bourne shell名名称,是Unix和许多类Unix操作系统/Linux的标准命令语言解释器。 -c是sh选项表示读取命令字符串并运行。

'f="{}"; mv -- "$f" "${f%.html}.php"'这是一个命令的字符串,我想你应该知道大概含义,我们这里简单说一下。 f="{}"表示将{}赋值给变量f{} 是文件名。

最后'f="{}"; mv -- "$f" "${f%.html}.php"' 这个命令字符串将由sh来解释并运行。 分号;结束exec执行的命令。 它需要用\\进行转义,这样你在里面运行的shell 就不会把它当作自己的特殊字符,而是将它传递给find。

rename命令重命名文件

rename用于重命名多个文件。 rename命令相比mv,你需要一些正则表达式的高级知识。

rename命令有两个版本,语法不同。 在本教程中,我们将使用rename命令的perl版本。 如果您的系统上未安装此版本,则可以使用发行版的软件包管理器安装该版本。

如果你的计算机运行的是基于Debian的Linux发行版,例如Ubuntu,Linux mint。 可运行命令sudo apt update && sudo apt install rename安装rename。

对于基于Redhat的Linux发行版,例如CentOS,Fedora。 可运行命令sudo apt update && sudo apt install rename安装rename。

Arch Linux用户可运行命令yay perl-rename或者yaourt -S perl-rename安装rename。

sudo apt update && sudo apt install rename
sudo yum install prename
yay perl-rename ## or yaourt -S perl-rename

rename命令的语法是rename [OPTIONS] perlexpr files。 files表示多个文件,perlexpr是使用perl的正则表达式。

rename命令将多个文件根据指定的正则表达式重命名所有文件。 你可以在这里阅读更多关于Perl的正则表达式的知识。

perl的正则表达式基本语法是action/SEARCHLIST/REPLACEMENTLIST/cdsr。 在重命名文件的perl正则表达式中常用的s///替换模式。

action 表示你要执行操作,SEARCHLIST表示你要搜索的内容,REPLACEMENTLIST表示你要REPLACEMENTLIST 替换SEARCHLIST

在使用rename重命名文件时,您还可以使用-n参数在不真实的运行reanme命令尝试打印要重命名的文件的名称。 这将不会不重命名你的文件,可以用来做简单的测试。

默认情况下,rename命令不会覆盖现有文件。 传递-f参数以允许覆盖现有文件。

例如,下面的rename命令将更改与扩展名.html.php

rename 's/.html/.php/' *.html
rename -f 's/.html/.php/' *.html #覆盖现有文件
rename -n 's/.html/.php/' *.html #尝试运行,用于测试

输出看起来像这样:

rename(file-90.html, file-90.php)
rename(file-91.html, file-91.php)
rename(file-92.html, file-92.php)
rename(file-93.html, file-93.php)
rename(file-94.html, file-94.php)

以下是一些如何使用rename命令的常见示例。

用下划线替换文件名中的空格

rename 'y/ /_/' *

将文件名转换为小写

rename 'y/A-Z/a-z/' *

将文件名转换为大写

rename 'y/a-z/A-Z/' *

结论

至此您应该很好地理解如何使用mvrename命令重命名文件。 当然,还有其他命令可以在Linux中重命名文件,例如mmv。 对于新Linux用户可以使用GUI批量重命名工具,例如Métamorphose。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    10992

    浏览量

    206745
  • 文件
    +关注

    关注

    1

    文章

    540

    浏览量

    24402
  • 命令
    +关注

    关注

    5

    文章

    638

    浏览量

    21849
收藏 人收藏

    评论

    相关推荐

    php中rename()函数的妙用

    php中rename()函数的妙用 大家都知道,rename()函数可以对文件或目录进行重命名的操作。其实它还可以做很多事情。 熟悉unix的朋友应该知道shell
    发表于 01-11 09:33

    新手求助,如何按规定对文件进行重命名

    比如,一个原始文件夹下有好几个子文件夹,每个子文件夹下又有很多图片,现在有一个EXCEL表格,每列代表一个子文件夹中图片的新名字,要求按EXCEL表格的
    发表于 10-28 08:53

    保存“设置数据(.scp)”我无法重命名文件名。(MSOX-4034A)

    我想通过设置菜单将设置数据保存到示波器。但是,我无法从“setup_0”(默认名称)重命名文件名。如何使用给定的文件名将设置数据保存到示波器中?谢谢, 以上来自于谷歌翻译 以下为原文I want
    发表于 09-11 16:19

    重命名项目不在4.15上编译

    项目文件夹”单选按钮。4。当只更改“项目名称”时,我可以编译和运行,但名称本身在项目窗口中没有改变,这不是我的目标。5。因此,我标记“重命名项目文件夹”单选按钮,项目的名称在项目窗口中确实发生了变化
    发表于 09-25 17:36

    CyWDR文件也需要重命名吗?

    我想克隆一个项目,作为一个非常类似的项目的开始(稍后为相同代码的新版本)使用。是“将工作区/项目归档”到新文件夹并解压缩它的推荐方法。然后打开被复制和右击的项目并“重命名”主项目?关于“CyWDR
    发表于 08-15 14:02

    f_rename函数具体该怎么使用?

    哥最近在搞资源管理器的程序请教原子哥f_rename函数的用法根据说明此函数能重命名,移动文件因此我编写如下:f_rename("0:/test.txt","0
    发表于 08-25 21:22

    在库中查看怎么删除或重命名函数?

    >我之前没有这样做,也不能>在库中查看如何删除或重命名函数?打开库(文件 - >打开)并编辑。它不是一个vxe,是吗?-SHAWN- 以上来自于谷歌翻译 以下为原文> I
    发表于 10-28 14:05

    求助,如何重命名(正确的方式)STM32 项目?

    如何重命名(正确的方式)STM32 项目?如果我按 F2 我可以重命名项目的名称,但项目文件夹仍然具有相同的名称。如果我更改文件夹的名称,则会出现错误。为什么?有
    发表于 01-30 06:28

    Pads文件转换Allegro PCB后封装如何按PAD大小规则的重命名

    Pads文件转换Allegro PCB后封装如何按PAD大小规则的重命名,避免设计出错。  封装PAD名字规则重命名  1、导出整板PCB封装到一个新的lib文件路径  2、任意打开一
    发表于 03-31 15:19

    什么是Register Renaming(寄存器重命名)/R

    什么是Register Renaming(寄存器重命名)/Resource contention(资源冲突)  Register Renaming: (寄存器重命名)把一个指令的输出
    发表于 02-04 10:35 2258次阅读

    LABVIEW中文件重命名的几种方法——陈树学《labview宝典》

    和REN是等同的,属于内部DOS命令。需要注意的是重命名后的文件名不能指定驱动器和路径,因为只能在源文件夹中重命名。四、利用API函数当遇到
    发表于 01-03 16:35 4286次阅读
    LABVIEW中<b class='flag-5'>文件</b><b class='flag-5'>重命名</b>的几种方法——陈树学《labview宝典》

    在Linux上使用简单的cp和mv命令来复制和重命名文件

    重命名它们,而不必为它们中的每一个使用 mv 命令。 /A-Z/a-z/ 告诉 rename 命令将范围 A-Z 中的任何字母更改为 a-z
    的头像 发表于 06-25 14:02 8201次阅读

    如何使用python给所有文件重命名

    本文档的主要内容详细介绍的是如何使用python给所有文件重命名资料免费下载。
    发表于 09-22 17:09 2次下载
    如何使用python给所有<b class='flag-5'>文件</b>夹<b class='flag-5'>重命名</b>

    Linux rename命令重命名多个文件与目录

    使用`mv`命令重命名多个文件和目录可能是一个乏味的过程,因为它涉及使用管道,循环等编写复杂的命令
    的头像 发表于 12-09 17:41 2677次阅读

    讨论Linux mv命令的一些实际示例

    mv 命令的最基本用途是重命名文件。那么让我们看看如何重命名当前目录中的文件
    的头像 发表于 02-14 16:28 437次阅读