1.rename的用法

rename与mv的区别就是mv只能对单个文件重命名,而rename可以批量修改文件名
linux中的rename有两种版本,一种是C语言版的,一种是Perl版的。早期的Linux发行版基本上使用的是C语言版本,现在系统几乎都是Perl语言版本了,如何区分系统里的rename是哪个版本的,可以通过一下方式:
输入man rename 看到第一行中包含Linux Programmer’s Manual时,这就是C语言版本的,如果第一行中包含 Perl Programmers Reference Guide,则就是Perl版本的。
 
Perl语言版本的rename用法
perl版本的rename同sed中的语法类似,rename [-v/-n/-f] perl正则表达式 [待处理的文件]
  1. -v(verbose)打印被成功重命名的文件,即打印执行过程
  2. -n(no-act)只显示将被重命名的文件,而非实际进行重命名操作
  3. -f(force)覆盖已经存在的文件
  4. files需要被替换的文件(比如*.c、*.h),如果没给出文件名,将从标准输入读
常用的参数是-n,可以先用-n参数对一部小部分图片进行测试,每次执行命令会在terminal中把效果列出来,等确保没问题后去掉-n参数,再对全部数据进行统一处理。
 
举例:
将(1).jpg
(2).jpg
…..
改为:
test_001.jpg
test_002.jpg
……
1、去掉括号
rename -n 's/[()]//g' *.jpg
 
2、继续重命名为想要的格式
rename -n 's/^/test_00/' *.jpg
解释:
-n直接打印结果在终端中而非实际执行
s代表substitution,替换的意思
[()]代表匹配[]中的内容
//两个斜杠之间是空代表替换为空的内容,相当于删除
g代表全部匹配,不加g的话默认只会匹配一个括号
^-在文件名称开头加字符
test_00-将名称前面添加上test_00
规则化数字编号名
将1.jpg, 2.jpg ..... 100.jpg
改为:
001.jpg,002.jpg,...023.jpg,...100.jpg
1.把1.jpg ..... 9.jpg 变换为001.jpg .... 009.jpg
rename 's/^/00/'  [0-9].jpg
 
2. 把10.jpg ..... 99.jpg 变换为010.jpg ..... 090.jpg
rename 's/^/0/' [0-9][0-9].jpg 
 
去除文件名中空格
1.老方法
find . -type f -name "* *" -print |while read name; do mv "${name}" `echo "${name}"|sed "s/[ ]\+/_/g"`;done
 
2.rename方法
rename "s/[ ]+/_/g" *
● 其中[ ]+表示空格出现一次或多次,空格可以用[:space:]代替,该命令可替换为[[:space:]]+
● 在sed中需要将+转义,但在rename中不能转义,因为rename 采用的是标准perl正则语法
● 从命令中能够看到sed与rename的区别,rename处理的是该目录下所能匹配到的所有文件,它将所有文件名作为处理的对象,而命令sed 处理的是文件内容,所以只能通过echo "文件名"|sed "s/[ ]\+/_/g的方式才能处理文件名
批量修改文件前缀
场景:folder A中有a.rtv b.a.c.imu a.t.gps a.y.ew.imu等等,想要将这些文件的文件名统一为test,后缀保持不变
一般的思路:
1.遍历folder,依次获取文件
2.获取文件后缀${pre}
3.使用mv ${file}  test.${pre}
该方法中没有文件都要获取后缀再执行mv命令,灰常复杂
rename方法:
rename 's/.*\./test./' *
.*\.中.*代表匹配多次单个字符,\.代表对点进行转义。
其他:
 
 
rename 's/^/hello/' * 统一在文件头部添加上hello 
rename 's/.html$/.htm/' * 统一把.html扩展名修改为.htm
rename 's/$/.zip/' * 统一在尾部追加.zip后缀:
rename 's/.zip$//' * 统一去掉.zip后缀
 
 
C语言版本rename的用法
     rename 原字符串 需改成的字符串 需要修改的文件
  rename 'test' 'tast' *.txt,将文件名中的test改为tast
  rename .jpeg .jpg *.jpeg  修改文件的扩展名
总的来说:rename C语言版本所能实现的功能:批量修改文件名,结果是每个文件会被相同的一个字符串替换掉!也就是说,无法实现诸如循环 然后按编号重命名等
 

2.Perl正则表达式

1.三种形式
匹配:m// 
(可以省略m,直接写成/regexp/)
替换:s/// 
s/PATTERN/REPLACEMENT/egimosx
e 将右侧作为表达式计算。
g 全匹配
i 不区分大小写的模式匹配
m 将字符串视为多行。
o 只编译一次模式,即使其中的变量发生变化。
s 将字符串视为单行。
x 使用扩展正则表达式
转化:tr/// 
转化有两种等价表达方式,如下:
tr/SEARCHLIST/REPLACEMENTLIST/cds
y/SEARCHLIST/REPLACEMENTLIST/cds
c 补充 SEARCHLIST.
d 删除找到但未替换的字符
s 压缩重复的替换字符
rename命令常用到替换和转化两种(用匹配也没意义)。转换跟替换不同,替换是将replacement整个字符串替换pattern字符串,而转换则是用replacementlist逐个字符替换searchlist逐个字符,结果依赖于replacementlist与searchlist字符个数,比如'tr/Sam/Stm/',用S替代S,t替代a,m替代m。
举例:
rename -n 'tr/Sam3/Stm/' FastSpiSam3C.nc
替换字符短,用最后一个字符m替换3
FastSpiSam3C.nc renamed as FtstSpiStmmC.nc
rename -n 'tr/Sam3/Stm32/' FastSpiSam3C.nc
替换字符长,多出字符被忽略
FastSpiSam3C.nc renamed as FtstSpiStm3C.nc
2.正则表达式中的一些常用模式
x?  匹配 0 次或一次 x 字符串
\d  匹配一个数字的字符,和 [0-9] 语法一样
x*  匹配 0 次或多次 x 字符串,但匹配可能的最少次数
\d+  匹配多个数字字符串,和 [0-9]+ 语法一样
x+  匹配 1 次或多次 x 字符串,但匹配可能的最少次数
\D  非数字,其他同 \d
.*  匹配 0 次或一次的任何字符
\D+  非数字,其他同 \d+
.+  匹配 1 次或多次的任何字符
\w   英文字母或数字的字符串,和 [a-zA-Z0-9] 语法一样
{m} 匹配刚好是 m 个 的指定字符串
\w+  和 [a-zA-Z0-9]+ 语法一样
{m,n}匹配在 m个 以上 n个 以下 的指定字符串
\W   非英文字母或数字的字符串,和 [^a-zA-Z0-9] 语法一样
{m,} 匹配 m个 以上 的指定字符串
\W+   和 [^a-zA-Z0-9]+ 语法一样
[]  匹配符合 [] 内的字符
\s    空格,和 [\n\t\r\f] 语法一样
[^] 匹配不符合 [] 内的字符
\s+   和 [\n\t\r\f]+ 一样
[0-9]匹配所有数字字符
\S    非空格,和 [^\n\t\r\f] 语法一样
[a-z]匹配所有小写字母字符
\S+   和 [^\n\t\r\f]+ 语法一样
[^0-9]匹配所有非数字字符
\b    匹配以英文字母,数字为边界的字符串
[^a-z]匹配所有非小写字母字符
\B    匹配不以英文字母,数值为边界的字符串
^   匹配字符开头的字符
a|b|c 匹配符合a字符 或是b字符 或是c字符 的字符串
$   匹配字符结尾的字符
abc   匹配含有 abc 的字符串
 

rename 批量修改文件名的更多相关文章

  1. rename 批量修改文件名简单用法

    有的时候我们需要批量创建文件做测试,为了做区分,一般只要稍稍动动文件名即可,MV命令既可以移动文件,也是可以修改文件名的,但批量修改文件名MV做不到,此时,我们可以用rename命令批量修改是蛮不错的 ...

  2. rename批量修改文件名

    批量改名: 如文件,批量修改,把hello去掉[root@localhost wang]# ll-rw-r--r-- 1 root root 0 5月 14 02:36 a.hello.txt-rw- ...

  3. Linux下批量修改文件名(rename)

    原文地址: http://blog.csdn.net/sea_shore/article/details/6102437 1.rename命令批量修改文件名, 其实linux下可以使用别的办法来批量修 ...

  4. 初学shell,为了练习sed,写了个简单的批量修改文件名的脚本,后来执行时发现系统竟然自带有一个rename命令,顺便也记下了

    1 #!/bin/bash   2 <<Comment   3 批量修改文件名的脚本   4 2015/10/24   5 webber   6 Comment   7 ARGS=2   ...

  5. Linux下find一次查找多个指定类型文件,指定文件或者排除某类文件,在 GREP 中匹配多个关键 批量修改文件名等

    http://blog.sina.com.cn/s/blog_62e7fe670101dg9d.html linux下二进制文件查找: strings 0000.ts | grep -o " ...

  6. linux批量修改文件名的shell脚本

    linux中批量修改文件名的shell脚本代码,主要是使用了rename,结合shell,喜欢的朋友可以参考下 使用 rename 命令  ========================  NAME ...

  7. 用python批量修改文件名

    从youtube上当下来百来首mv,每个都需要去掉视频,这还挺好弄得,格式工厂一弄就完了,但是文件名,都带有乱七八糟的*啥的巴拉巴拉的,咋修改啊,几百首总不可能一个一个rename吧 #批量修改文件名 ...

  8. 批量修改文件名后缀,例如:html修改成HTML

    批量修改文件名后缀,例html修改成HTML 把文件后缀名html全部修改成HTML: 例:aa.html aa.HTML #!/bin/bash for file in `ls`;do mv $fi ...

  9. shell脚本:批量修改文件名

    参考链接1:shell脚本:批量修改文件名(删除文件名中字符) 参考链接2:linux shell 字符串操作详解 (长度,读取,替换,截取,连接,对比,删除,位置 ) 参考链接3:每天一个linux ...

随机推荐

  1. 基于CC2530的ZigBee最小系统

    http://www.cirmall.com/circuit/1946/%E5%9F%BA%E4%BA%8ECC2530%E7%9A%84ZigBee%E6%9C%80%E5%B0%8F%E7%B3% ...

  2. 重新整理 .net core 实践篇————依赖注入应用之援军[四]

    前言 介绍第三方依赖注入框架Autofac,看看为我们解决什么问题. 下面介绍4个点: 命名注册 属性注册 aop 注入 子容器命名 正文 为什么我们需要使用第三方框架?第三方框架为我们做了什么?第三 ...

  3. php反转字符串的三种方法

    (假设有字符串abcd,用php实现字符串翻转) 1.第一种php有自带的函数strrev可以轻松实现: $str = 'abcd'; //第一种自带strrev实现翻转 echo strrev($s ...

  4. MongoDB(7)- 文档插入操作

    插入方法 db.collection.insertOne() 插入单条文档到集合中 db.collection.insertMany() 插入多条文档到集合中 db.collection.insert ...

  5. .NET6系列:C#10新功能预览

    系列目录     [已更新最新开发文章,点击查看详细] 2021年4月19日微软发布公告称将于今年夏季发布首款64位的 Visual Studio 2022,2021年5月20日又发布了 Visual ...

  6. Apple macOS 下载汇总

    macOS Big Sur 11,macOS Catalina 10.15,macOS Mojave 10.14,macOS High Sierra 10.13,macOS Sierra 10.12 ...

  7. 3D深度估计

    3D深度估计 Consistent Video Depth Estimation 论文地址:https://arxiv.org/pdf/2004.15021.pdf 项目网站:https://roxa ...

  8. 适用于Windows和Linux的Yolo-v3和Yolo-v2(下)

    适用于Windows和Linux的Yolo-v3和Yolo-v2(下) 如何训练(检测自定义对象): (培养老YOLO V2 yolov2-voc.cfg,yolov2-tiny-voc.cfg,yo ...

  9. 编译原理-确定有穷自动机(deterministic finite automata ,DFA)

    是一个五元组 M=(S,∑,f,S0,F) 其中 S:有穷状态集 ∑:输入字母表(有穷) f:状态转换函数.f(S,a)=S' 是单值部分映射,每个状态面临一个输入符号时,转入的后继状态是确定的. S ...

  10. flume采集MongoDB数据到Kafka中

    环境说明 centos7(运行于vbox虚拟机) flume1.9.0(自定义了flume连接mongodb的source插件) jdk1.8 kafka(2.11) zookeeper(3.57) ...