• {{ item.name }}
  • Home
  • Linux
  • Programming
    • Python
  • Life
  • Other
  • Tools
  • 投资者该如何参与优秀的区块链项目- NuLink社区圆桌会议
  • 什么是NuLink?- 项目中文社区与项目研究组成员 Rookie 对话实录
  • NuLink 融资 400 万美元用于开发隐私保护技术
  • NuLink的零知识证明介绍(1)
  • 用bitwarden_rs搭建属于自己的密码管理器
  • 修复 CentOS vps 网卡失效
  • 记录用mac给Nexus6P刷Android10的错误
  • Centos 6.8启用 TCP BBR拥塞控制算法
  • Nginx 启用HTTP2功能
  • Mac 安装adb工具
  • WordPress 默认编辑器代码按钮

rename

  • iansiu
  • 2016-07-03
  • 0

虽然 mv 可以重命名文件或目录,但是不可以批量重命名也不支持正则表达式(不写脚本的情况下)

幸好Linux系统下还有个rename命令可以使用,而且支持批量重命名和正则表达式。

rename有两个版本,一种是c语言版本、一种是Perl版本,c版本比较古老,几乎已经绝迹,这句话我是从网上看见的,但是事实证明还没绝迹,至少centos6.7就是c语言版本的。

Perl版本的更加强大,支持正则表达式,需要就是这个版本,google了一下找到了一个简略版。

地址:http://docstore.mik.ua/orelly/perl/cookbook/ch09_10.htm#ch09-40514

代码:

#!/usr/bin/perl -w
# rename - Larry's filename fixer
$op = shift or die "Usage: rename expr [files]\n";
chomp(@ARGV = <STDIN>) unless @ARGV;
for (@ARGV) {
$was = $_;
eval $op;
die $@ if $@;
rename($was,$_) unless $was eq $_;
}

保存为 rename,加上可执行权限就可以了

用法参考:

rename 's/\.orig$//' *.orig
rename 'tr/A-Z/a-z/ unless /^Make/' *
rename '$_ .= ".bad"' *.f
rename 'print "$_: "; s/foo/bar/ if =~ /^y/i' *
find /tmp -name '*~' -print | rename 's/^(.+)~$/.#$1/'

应用实例:

1. 批量修改文件后缀

./rename 's/\.htm$/\.html/' *.htm

2. 批量去除文件.bak后缀

./rename 's/\.bak$//' *.bak

3. 批量添加.txt后最

rename 's/$/\.txt/' *

4. 批量文件开头加上hello字符串

rename 's/^/hello/' *

5. 批量替换小写字母为大写

rename 'y/a-z/A-Z/' *

6. 批量去除文件名中的空格

rename 's/[ ]+//' *

7. 批量去除文件名的前缀

rename 's/^\[*.*\]//' *
© 2025 laowang's blog
Theme by Wing