Linux 批量重命名工具 rename 的使用

Linux 批量重命名工具 rename 的使用

安装

如果还没有安装,先执行安装命令

sudo apt-get install rename

用法

安装后,我们执行rename --help 命令来查看它的用法
用法有:

Usage:
rename [ -h|-m|-V ] [ -v ] [ -0 ] [ -n ] [ -f ] [ -d ]
[ -e|-E perlexpr]*|perlexpr [ files ]
Options:
-v, --verbose
Verbose: print names of files successfully renamed.
-0, --null
Use \0 as record separator when reading from STDIN.
-n, --nono
No action: print names of files to be renamed, but don’t rename.
-f, --force
Over write: allow existing files to be over-written.
–path, --fullpath
Rename full path: including any directory component. DEFAULT
-d, --filename, --nopath, --nofullpath
Do not rename directory: only rename filename component of path.
-h, --help
Help: print SYNOPSIS and OPTIONS.
-m, --man
Manual: print manual page.
-V, --version
Version: show version number.
-e Expression: code to act on files name.
May be repeated to build up code (like “perl -e”). If no -e, the
first argument is used as code.
-E Statement: code to act on files name, as -e but terminated by
‘;’.

简要说明几个可能用到的选项:

  • -n, --nono 加上这个选项可以查看会发生重命名的文件名,但不会做实际的重命名操作,对于重要文件,为防止批量重命名出现错误,可以在执行真正的重命名之前先加上这个选项执行一下来预先对结果做个判断
  • -f, --force 加上这个选项,如果重命名时发生了文件名相同的冲突,会把冲突的文件覆盖,如果不加,发生了文件名重复的冲突会命名失败
  • –path, --fullpath 执行重命名时会将目录下的子目录一起重命名,这是默认配置,不加默认也是这样的
  • -d, --filename, --nopath, --nofullpath 执行重命名时只会重命名文件,不会重命名子目录,与上一条对应,如果只想做文件的批量重命名,应当加上此选项

表达式使用

rename 的主体部分是 perlexpr ,也就是Perl正则表达式,详细使用方法参考官方文档或perl相关教程,这里只是简单说一下在rename 操作中可能会用到的内容

  • 表达式规则
    前缀/查找内容/替换内容/后缀

前缀部分放操作符,通常用的有:s,替换; tr transform,转换
后缀部分放修饰符,不同的操作符对应不同的修饰符

替换 s:

  • 可以吧查找的字符串替换为指定的字符串
  • 加上修饰符i,(可能是 ignore case),大小写不敏感
  • 加上修饰符g,替换所有匹配字符,一个字符串中如果出现多个与所输入的查找字符串匹配的内容都会被替换,不加此修饰符只会替换第一个匹配的字符
  • 加上修饰符e,表示替换部分内容也是正则表达式,需要保留所查找到的文件名中的某段未知字符串的时候很有用

示例:

文件名去除某段字符串 rename -v 's/副本//' * 其中副本即为要去掉的字符串,执行结果如下:

appsettings.amazonaws(副本 1).json renamed as appsettings.amazonaws( 1).json
appsettings.amazonaws(副本 2).json renamed as appsettings.amazonaws( 2).json

交换文件名称中的某段字符 rename -n 's/([g-s]+)\.(.*)aws/$2\.$1/' *
结果如下:

rename(appsettings.amazonaws( 2).json, appsettamazon.ings( 2).json)
rename(appsettings.amazonaws().json, appsettamazon.ings().json)
rename(appsettings.amazonaws.json, appsettamazon.ings.json)

批量加前缀 rename -n --nopath 's/([.]*)/prefix_/' *,或者rename -n --nopath 's/^/prefix_/' *

结果如下:

rename(appgithub_csdn, prefix_appgithub_csdn)
rename(appsettings.amazonaws( 2).json, prefix_appsettings.amazonaws( 2).json)
rename(appsettings.amazonaws().json, prefix_appsettings.amazonaws().json)
rename(appsettings.amazonaws.json, prefix_appsettings.amazonaws.json)

批量加后缀rename -n --nopath 's/(.+)/$1???/' *
结果如下:

rename(appsettings.amazonaws( 2).json, appsettings.amazonaws( 2).json???)
rename(appsettings.amazonaws().json, appsettings.amazonaws().json???)
rename(appsettings.amazonaws.json, appsettings.amazonaws.json???)

在指定匹配前加入内容 rename -n --nopath 's/([g-s]+)/www$1/' *
结果如下:

rename(appsettings.amazonaws( 2).json, awwwppsettings.amazonaws( 2).json)
rename(appsettings.amazonaws().json, awwwppsettings.amazonaws().json)
rename(appsettings.amazonaws.json, awwwppsettings.amazonaws.json)

替换某个文件名中的所有指定的字符rename -n --nopath 's/s/?/g' *

rename(appsettings.amazonaws( 2).json, app?etting?.amazonaw?( 2).j?on)
rename(appsettings.amazonaws().json, app?etting?.amazonaw?().j?on)
rename(appsettings.amazonaws.json, app?etting?.amazonaw?.j?on)

就这样吧,如有误,欢迎指正!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值