出处:Jelline Bloghttp://blog.chinaunix.net/uid-9112803-id-2377271.html

一、rename命令

摘要:
  本文介绍rename命令完成重命名批量文件语法,介绍了rename用到的Perl的替换和转化形式,并给出常用正规表达式。最后给出几个实例。

  偶尔会遇到需要重命名批量文件,最典型的例子就是数码相机的相片,在Ubuntu可以用工具Purrr或者PerfixSuffix实现该功能,但重命名批量文件并不常用,为了偶尔的一次操作,安装工具(可能通过Ubuntu Software Center或者sudo apt-get install安装),加之图形化界面操作也比较费时间。事实上,rename命令就可以出色完成该工作。

  Linux的 rename 命令有两个版本(C语言和Perl语言),早期的Linux发行版基本上使用的是C语言版本,现在系统几乎都是Perl语言版本了(支持正则处理,功能更强大)[1]。可以通过命令man rename打开rename帮助文档查看版本,如果第一行内容如下,则是Perl语言版本。
  1. RENAME(1)     Perl Programmers Reference Guide              RENAME(1)
  鉴于Perl语言版本是主流,本文只介绍该版本下rename的用法,C语言版本操作见[1]。Perl语言版本的rename命令格式如下:
  1. rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]
-v(verbose)打印被成功重命名的文件
-n(no-act)只是显示将被重命名的文件,而不重命名(重命名之前可以用-n确认
          需要重命名的文件)

-f(force)覆盖已经存在的文件
perlexprPerl语言格式的正则表达式
files需要被替换的文件(比如*.c、*.h),如果没给出文件名,将从标准输入读
  先举个例子来感受下,比如将当前目录下所有*.nc文件中Sam3替换成Stm32,命令如下:
  1. rename -n 's/Sam3/Stm32/' *.nc  /*确认需要重命名的文件*/
  2. rename -v 's/Sam3/Stm32/' *.nc  /*执行修改,并列出已重命名的文件*/
  整个命令的重点在于Perl语言正则表达式,下一部分将予以较详细的介绍。
二、Perl正则表达式
2.1 三种形式[2]
匹配:m/<regexp>/  (可以省略m,直接写成/regexp/)
替换:s/<pattern>/<replacement>/ 
转化:tr/<pattern>/<replacement>/ 
  博文[3]给出了8种模式,rename命令常用到替换和转化两种(用匹配也没意义)。转换跟替换不同,替换是将replacement整个字符串替换pattern字符串,而转换则是用replacement逐个字符替换pattern逐个字符,结果依赖于replacement与pattern字符个数(见下述分析)。

(1)替换
替换表达方式如下[3],还有一系列参数,貌似不怎么用得着。
  1. s/PATTERN/REPLACEMENT/egimosx
eEvaluate the right side as an expression.
gMatch globally, i.e. all occurrences.
iCase-insensitive pattern matching.
mTreat string as multiple lines.
oOnly compile pattern once, even if variables within it change.
sTreat string as single line.
xUse extended regular expressions
(2)转化
转化有两种等价表达方式,如下:
  1. tr/SEARCHLIST/REPLACEMENTLIST/cds
  2. y/SEARCHLIST/REPLACEMENTLIST/cds
cComplement the SEARCHLIST.
dDelete found but unreplaced characters.
sSquash duplicate replaced characters.
  转化同替换不同,用REPLACEMENTLIST逐个字符替换SEARCHLIST逐个字符,比如'tr/Sam/Stm/',用S替代S,t替代a,m替代m。结果依赖于两者字符长短,下面以文件名FastSpiSam3C.nc为例进行说明:
  1. jelline@jelline:~$ rename -n 'tr/Sam3/Stm/' FastSpiSam3C.nc /*替换字符短,用最后一个字符m替换3*/
  2. FastSpiSam3C.nc renamed as FtstSpiStmmC.nc
  3. jelline@jelline:~$ rename -n 'tr/Sam3/Stm32/' FastSpiSam3C.nc /*替换字符长,多出字符被忽略*/
  4. FastSpiSam3C.nc renamed as FtstSpiStm3C.nc

  参数c、d、s把我搞懵了,本想通过一系列操作,总结规律,结果徒劳。

2.2 常用模式
正则表达式中的一些常用模式pattern[2]:
x?  匹配 0 次或一次 x 字符串
x*  匹配 0 次或多次 x 字符串,但匹配可能的最少次数
x+  匹配 1 次或多次 x 字符串,但匹配可能的最少次数
.*  匹配 0 次或一次的任何字符
.+  匹配 1 次或多次的任何字符
{m} 匹配刚好是 m 个 的指定字符串
{m,n}匹配在 m个 以上 n个 以下 的指定字符串
{m,} 匹配 m个 以上 的指定字符串
[]  匹配符合 [] 内的字符
[^] 匹配不符合 [] 内的字符
[0-9]匹配所有数字字符
[a-z]匹配所有小写字母字符
[^0-9]匹配所有非数字字符
[^a-z]匹配所有非小写字母字符
^   匹配字符开头的字符
$   匹配字符结尾的字符
\d  匹配一个数字的字符,和 [0-9] 语法一样
\d+  匹配多个数字字符串,和 [0-9]+ 语法一样
\D  非数字,其他同 \d
\D+  非数字,其他同 \d+
\w   英文字母或数字的字符串,和 [a-zA-Z0-9] 语法一样
\w+  和 [a-zA-Z0-9]+ 语法一样
\W   非英文字母或数字的字符串,和 [^a-zA-Z0-9] 语法一样
\W+   和 [^a-zA-Z0-9]+ 语法一样
\s    空格,和 [\n\t\r\f] 语法一样
\s+   和 [\n\t\r\f]+ 一样
\S    非空格,和 [^\n\t\r\f] 语法一样
\S+   和 [^\n\t\r\f]+ 语法一样
\b    匹配以英文字母,数字为边界的字符串
\B    匹配不以英文字母,数值为边界的字符串
a|b|c 匹配符合a字符 或是b字符 或是c字符 的字符串
abc   匹配含有 abc 的字符串
三、实例
3.1 将所有*.nc文件中Sam3替换成Stm32
  1. rename -v 's/Sam3/Stm32/' *.nc  /*执行修改,并列出已重命名的文件*/
3.2 去掉文件后缀名(比如去掉.bak)
  1. rename 's/\.bak$//' *.bak
3.3 将文件名改为小写
  1. rename 'y/A-Z/a-z/' *
3.4 去掉文件名的空格
  1. rename 's/[ ]+//g' *
3.5 文件开头加入字符串(比如jelline)
  1. rename 's/^/jelline/' *
3.6 文件末尾加入字符串(比如jelline)
  1. rename 's/$/jelline/' *
参考资料:
[1] 博文《Linux rename命令批量重命名
[2] 博文《Perl 中的正则表达式
[3] 博文《Perl Pattern Matching》

buntu用rename命令批量重命名文件相关推荐

  1. linux 使用rename命令批量重命名文件

    linux 使用rename命令批量重命名文件 命令格式: Usage: rename [-v] [-n] [-f] perlexpr [filenames] 参数说明: v 显示文件重命名的细节 n ...

  2. Linux rename命令 批量重命名

    Linux rename命令 批量重命名 Linux的 rename 命令有两个版本,一个是C语言版本的,一个是Perl语言版本的,早期的Linux发行版基本上使用的是C语言版本的,现在已经很难见到C ...

  3. linux重命名的命令行操作,Linux rename命令批量重命名的方法

    Linux的 rename 命令有两个版本,一个是C语言版本的,一个是Perl语言版本的,早期的Linux发行版基本上使用的是C语言版本的,现在已经很难见到C语言版本的了,由于历史原因,在Perl语言 ...

  4. 如何用命令批量重命名文件

    相信大家不管是程序员还是其他行业白领人员,在使用电脑办公时,都会遇到一种需求,就是对大量名字有一定规律的文件进行重命名. 对于程序员来说,在 Linux 环境下,我们可以使用一些命令行工具就可以完成这 ...

  5. 利用Excel和ren命令批量重命名文件技巧

    要求:将下面的文件全部重命名为1.jpg,2.jpg-- 解决方法: 1.Win+R 打开cmd命令行,依次输入一下命令 [注:]dir /b>a.xls 将当前目录下的文件目录重定向到a.xl ...

  6. Linux下批量重命名文件

    Linux下批量重命名文件 通过rename命令批量重命名文件 基本语法 示例 1. 改变文件扩展名 2. 大写改成小写 3. 更改文件名模式 通过rename命令批量重命名文件 基本语法 renam ...

  7. ubuntu批量重命名文件

    使用rename命令批量重命名文件 先看这个例子,将所有.nc文件中的x1替换成x2 rename -n 's/x1/x2/' *.nc # confirm the files you need to ...

  8. Linux下批量重命名文件或文件夹(rename命令)

    cp  mv 在复制.移动文件时,可单个更改文件名称 下面介绍Linux系统中另一个重命名命令 rename命令的用法. 批量创建那些规格差不多的文件名.[测试的第一步] [root@linuxidc ...

  9. python下载文件并改名_第46p,8行代码,用Python批量重命名文件

    大家好,我是杨数Tos,这是<从零基础到大神>系列课程的第46篇文章,第二阶段的课程:Python基础知识:小案例之用Python批量重命名文件. 学习本课程,建议先看一遍:[计算机基础知 ...

最新文章

  1. The Innovation | Volume 2 Issue 2 正式出版
  2. IOS怎么判断网络连接
  3. UIScrollView用法
  4. java简述对象的组合_Java程序运行和对象创建过程简述
  5. 他们的背后,是我们!
  6. Verilog功能模块——降采样
  7. ZOJ 2702 Unrhymable Rhymes(DP)
  8. python能做出exe程序么_教你用python做exe程序
  9. php计算上个月是几月份
  10. 决策树 prepruning_智能建筑运维前探 AI天天见之五:决策树算法应用探索
  11. Linux内核与文件系统分析
  12. [2017.3.29]中国生育腚理不互质
  13. vs 和 rider 一决高下 结合开发dotnet应用
  14. 三层架构(命名规则)
  15. 计算机无法共享打印机共享的打印机驱动,打印机不能共享_打印机不能共享怎么办?-太平洋IT百科...
  16. 阿里云的maven仓库配置
  17. 3dmax中的切角chamfer能用出什么花来吗?
  18. STM32实现74HC595控制
  19. 朴树 vs. Lunar少女组,ET选的人你究竟爱谁?
  20. qmail邮件系统(五)vpopmail和qmailadmin对用户的管理

热门文章

  1. WPS Office之PPT动画应用技能-陈慧-专题视频课程
  2. EHCI主机控制器--主机控制器初始化
  3. oracle验证pfile起库,Oracle数据库数据恢复验证笔记
  4. Pytorch——报错解决:TypeError: default_collate: batch must contain tensors, numpy arrays, numbers, found
  5. Spring 源码分析衍生篇十三 :事务扩展机制 TransactionSynchronization
  6. macOS Big Sur 11.6.5正式版(20G517) With OpenCore 0.7.9 and Clover 5144 and winPE
  7. Cinder 组件详解
  8. Navicat Premium 查看某几个表的ER图(模型图)
  9. 使用TypeScript(TS) + Vue3+ Vite实现贪吃蛇项目
  10. 开始 网络广告 研究之旅--怎样使用网络广告赚钱?