

如何在Linu中重命名文件和目录
source link: https://www.myfreax.com/how-to-rename-files-in-linux/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

如何在Linu中重命名文件和目录
重命名文件和目录是您经常需要在Linux系统上执行的最基本任务之一。重命名单个文件很简单,但一次重命名多个文件可能是一个挑战
Published 11 Aug 2019
6 min read

重命名文件和目录是您经常需要在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版本。如果您的系统上未安装此版本,则可以使用发行版的软件包管理器安装该版本。
在Ubuntu和Debian上安装rename
sudo apt install rename
在CentOS和Fedora上安装prename
sudo yum install prename
在Arch Linux上安装rename
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/' *
至此您应该很好地理解如何使用mv
和rename
命令重命名文件。当然,还有其他命令可以在Linux中重命名文件,例如mmv
。对于新Linux用户可以使用GUI批量重命名工具,例如Métamorphose。
Share this article:
Recommend
-
31
-
40
-
9
大家好,又到了Python办公自动化(偷懒)专题。 今天介绍的案例是如何利用Python来自动化移动、修改、重命名文件/夹,这样的操作在日常办公中经常会用到,若能掌握用Python实现将会大大提高效率! 所以我希望能够通过这篇文章来让大家了解...
-
6
Python批量重命名压缩文件 2021年1月19日 | 最近更新于 下午7:35工作上遇到一个问题,QA提供的1000多个压缩文件名称命名不规范,服务器做C++覆盖率产物解析,压缩文件文件名必须和解压之后的文件名一致,所以只是修改压缩文件名称行不通,...
-
4
使用rename批量重命名文件 在linux上我们一般用 mv 命令来对文件进行重命名操作,但是 mv 一次只能对一个文件进行重命名,对批量文件进行重命名就比较麻烦了。 一直以来我都是写一段shell循环或者跟 xargs...
-
9
V2EX › Linux 如何理解 mv 重命名改变了文件的 ctime? lolcat · 2 小时 26 分钟前 · 338 次点...
-
9
WordPress上传文件自动重命名 WordPress上传文件默认是不改变文件名称的,可对中文文件名而言,某些系统、某些浏览器访问是会出现问题滴,那么怎样让Wordpress上传文件自动重命名呐? 以wordpress 3.5.1 为例,打开“wp-admin/includes...
-
6
当我们在 Windows 11 中添加一台新打印机时,操作系统会自动对打印机进行检测,...
-
6
rename Linux rename命令重命名多个文件与目录 使用mv命令重命名多个文件和目录可能是一个乏味的过程,因为它涉及使用管道 ...
-
5
Linu下如何让mount显示的很整齐 2024-01-19 1 分钟阅读 如果单独执行mount命令,显示的会很杂乱: mount /dev/sda3 on / type ext4 (rw) proc on /proc type proc (rw) sysfs on /sys type sysfs...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK