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. 5.8-12 watch、which、whereis、locate、updatedb

    5.8 watch:监视命令执行情况 watch命令可以以全屏的方式动态显示命令或程序的执行情况.   -n    命令执行的间隔时间,默认为2s -d    高亮显示命令结果的变动之处 -t     ...

  2. 10.14 ssh:安全地远程登录主机

    ssh命令 是openssh套件中的客户端连接工具,可以使用ssh加密协议实现安全的远程登录服务器,实现对服务器的远程管理,Windows中的替代工具为Xshell.putty.SecureCRT等. ...

  3. Jenkins 基础篇 - 任务创建

    前面了解了 Jenkins 上各种任务的区别后,我们就来实践应用下,先创建一个[文件夹]类型的任务,将我们目前的一些基础的演示任务[移动]到文件夹里面去,这样可以先做个简单的分类. 新建一个[文件夹] ...

  4. [leetcode] 39. 组合总和(Java)(dfs、递归、回溯)

    39. 组合总和 直接暴力思路,用dfs+回溯枚举所有可能组合情况.难点在于每个数可取无数次. 我的枚举思路是: 外层枚举答案数组的长度,即枚举解中的数字个数,从1个开始,到target/ min(c ...

  5. 第三方跨平台进程和系统监控库gopsutil

    gopsutil psutil是一个跨平台进程和系统监控的Python库,而gopsutil是其Go语言版本的实现.本文介绍了它的基本使用. Go语言部署简单.性能好的特点非常适合做一些诸如采集系统信 ...

  6. 【NX二次开发】切换模块的方法,切换到制图模块

    源码(NX12.0): Session theSession = NXOpen::Session::GetSession(); theSession->ApplicationSwitchImme ...

  7. 【c++】string详解

    参考: https://www.cnblogs.com/this-543273659/archive/2011/07/21/2113172.html  感谢博主 我能不用char*就不用,而使用C++ ...

  8. Spring Boot WebFlux-08——WebFlux 中 WebSocket 实现通信

    第08课:WebFlux 中 WebSocket 实现通信 前言 WebFlux 该模块中包含了对反应式 HTTP.服务器推送事件和 WebSocket 的客户端和服务器端的支持.这里我们简单实践下 ...

  9. 理解Spring:IOC的原理及手动实现

    Spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级开源框架.也是几乎所有Java工作者必须要掌握的框架之一,其优秀的设计思想以及其代码实现上的艺术也是我们需要掌握的. ...

  10. MySQL:聊一聊数据库中的那些锁

    在软件开发中,程序在高并发的情况下,为了保证一致性或者说安全性,我们通常都会通过加锁的方式来解决,在 MySQL 数据库中同样有这样的问题,一方面为了最大程度的利用数据库的并发访问,另一方面又需要保证 ...