早期版本的rename是C语言版本,如今新的Ubuntu中采用的都是perl版本,功能更加强大

Usage:rename [-v] [-n] [-f] perlexpr [filenames]-v(verbose)打印被成功重命名的文件
-n(no-act)只显示将被重命名的文件,而非实际进行重命名操作
-f(force)覆盖已经存在的文件
perlexprPerl语言格式的正则表达式
files需要被替换的文件(比如*.c、*.h),如果没给出文件名,将从标准输入读

常用的参数是-n,可以先用-n参数对一部小部分图片进行测试,每次执行命令会在terminal中把效果列出来,等确保没问题后去掉-n参数,再对全部数据进行统一处理。

此次应用是为了批量重命名一批图片文件(自己的图片数据,作为caffe训练和测试数据使用)
本来全部都是这种格式:

(1).jpg
(2).jpg
…..

要改为:

test_001.jpg
test_002.jpg
……

用了比较笨的办法:先把括号去掉,再统一改格式(假定图片文件存放在terminal打开的当前目录位置)
1、去掉括号

rename -n 's/[()]//g' *.jpg解释:
-n直接打印结果在终端中而非实际执行
引号中是perl的正则表达式,用来匹配和替换,s代表substitution,替换的意思
[()]代表匹配[]中的内容
//两个斜杠之间是空代表替换为空的内容,相当于删除
g代表全部匹配,不加g的话默认只会匹配一个括号

2、继续重命名为想要的格式

rename -n 's/^/test_/' *.jpg解释:
s-替换
^-在文件名称开头加字符
test_-将名称前面添加上test_

更详细的rename命令参考:Ubuntu用rename命令批量重命名文件

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

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

一、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//  (可以省略m,直接写成/regexp/)
替换:s/// 
转化:tr///  
  博文[3]给出了8种模式,rename命令常用到替换和转化两种(用匹配也没意义)。转换跟替换不同,替换是将replacement整个字符串替换pattern字符串,而转换则是用replacement逐个字符替换pattern逐个字符,结果依赖于replacement与pattern字符个数(见下述分析)。

(1)替换
替换表达方式如下[3],还有一系列参数,貌似不怎么用得着。
  1. s/PATTERN/REPLACEMENT/egimosx
e Evaluate the right side as an expression.
g Match globally, i.e. all occurrences.
i Case-insensitive pattern matching.
m Treat string as multiple lines.
o Only compile pattern once, even if variables within it change.
s Treat string as single line.
x Use extended regular expressions
(2)转化
转化有两种等价表达方式,如下:
  1. tr/SEARCHLIST/REPLACEMENTLIST/cds
  2. y/SEARCHLIST/REPLACEMENTLIST/cds
c Complement the SEARCHLIST.
d Delete found but unreplaced characters.
s Squash 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/' *

rename命令和批量重命名相关推荐

  1. Windows下的通过命令行批量重命名文件

    今天在工作时遇到了一个情况,通过高速扫描仪扫描的文件是以图片的形式保存到本地硬盘上的,但是扫描仪给图片命的名就很混乱,并不是我想要的.作为一个强迫症,于是就想到了手动把这些名字改过来.但是这一整个文件 ...

  2. windows下使用cmd命令文件批量重命名批量修改后缀重命名快捷键

    windows下重命名快捷键 按下F2重命名当前选中文件,输入完新的文件名之后不要回车保存,直接按下Tab键就会进入下一个文件的重命名. windows 下批量修改文件后缀 使用ren或者rename ...

  3. ubuntu 命令行批量重命名文件夹

    ubuntu 命令行批量rename文件夹 文件夹的命名有错(e.g., 1234./)由于有这个点(.)导致这些文件夹不能移动,因此想批量改文件夹名字.觉得理论上一行命令行是可以解决的,但搜索后发现 ...

  4. linux 中文件批量重命名

    mv 命令与批量重命名 linux 中文件重命名一般使用 mv 命令来完成.此命令以单个文件为参数将旧文件重命名为一个新的文件.如果要实现批量化重命名操作,用户需要自行编写程序. 实现批量重命名 最简 ...

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

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

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

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

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

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

  8. Linux rename命令 批量重命名

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

  9. buntu用rename命令批量重命名文件

    出处:Jelline Bloghttp://blog.chinaunix.net/uid-9112803-id-2377271.html 一.rename命令 摘要: 本文介绍rename命令完成重命 ...

最新文章

  1. 深入微服务 API 网关之架构实践篇
  2. python flask web开发_Python Flask web后端开发
  3. Hadoop系列五:Hadoop之Zookeeper篇
  4. 罗辑思维年终4小时演讲《时间的朋友》1000字浓缩版
  5. 链表的基本操作 java_详细实现单链表的基本操作【Java版】
  6. java字节输入与字符输入_Java中的字节输入出流和字符输入输出流
  7. vc/vs开发的应用程序添加dump崩溃日志转
  8. 栈与队列在SGI STL的底层实现
  9. android评论嵌套,android 嵌套的listview示例(可参照实现朋友圈评论)
  10. sails mysql_sails项目创建与常用基础操作总结
  11. [Java] 蓝桥杯ALGO-148 算法训练 5-1最小公倍数
  12. Mybatis 优化:
  13. 2021南航计算机专硕上岸经验贴
  14. 模糊PID控制器设计
  15. Unity 2d - 基础 - 碰撞(一) - 针对性碰撞
  16. CSS类选择器常用命名
  17. Linux权限“suid”与“guid”设置
  18. 服务注册Service Registration
  19. mysqldump导出表结构
  20. 1 MySQL8绿色版

热门文章

  1. Android 9.0 禁用屏幕锁屏和修改默认输入法为谷歌输入法功能实现
  2. 【图片新闻】西科斯基公司将建造美国总统的新型海军一号直升机VH-92A
  3. 真二次元!动漫形象风格迁移
  4. ClickHouse编程指南之DatabaseEngine和TableEngine
  5. CString、TCHAR*、char*转换
  6. Linux,邮件服务器配置
  7. java模拟器1.5.3_给力助手下载-bluestacks给力助手下载1.5.3 官网最新版-东坡下载
  8. 学生注册平台html,安全教育平台登录注册
  9. 【latex】论文或参考文献中出现俄文\西班牙文人名的解决方法
  10. php文件上传代码功能实现代码