c语言中rename的用法,rename

了解rename命令的目的是为了解决批量修改文件名,因为在nginx日志进行切割的时候,遇到一个问题,nginx服务下有二三十个域名,每个域名下都有一个属于自己的日志,为了图简单,所以想找一个命令能够批量修改文件名,然后在进行重新reload一下,虽然logrotate也能实现,但是,习惯了使用脚本就不太愿意使用logrotate,而且,有些东西没有办法自己定义,下面就使用nginx日志切割这个要求举个例子看看rename是如何使用的吧。首先,我先使用shell脚本创建100个以".log"结尾的文件。

[root@wulaoer ngixn]# for i in seq 1 100 ;do touch access_$i.log ;done

我们创建了100个文件,然后创建一个json目录,等下把".log"结尾的文件都改成".json"格式。我们只修改格式也不行,也需要知道日志是那一天的日志,所以需要给".json"格式的文件增加一个日期,这样以后查找就方便了。

[root@wulaoer ngixn]# mkdir json

[root@wulaoer ngixn]# rename .log date +%Y%m%d".json" *.log

[root@wulaoer ngixn]# ll

总用量 0

-rw-r--r-- 1 root root 0 1月 15 14:49 access_10020200115.json

-rw-r--r-- 1 root root 0 1月 15 14:49 access_1020200115.json

-rw-r--r-- 1 root root 0 1月 15 14:49 access_1120200115.json

-rw-r--r-- 1 root root 0 1月 15 14:49 access_120200115.json

-rw-r--r-- 1 root root 0 1月 15 14:49 access_1220200115.json

-rw-r--r-- 1 root root 0 1月 15 14:49 access_1320200115.json

............................................................

这样修改之后,只是针对文件的后缀修改,后来看到rename也可以根据正则修改文件名,在自己的电脑上测试了一下,命令执行没有错误,但是文件没有修改,郁闷。有多看了一下,原来rename命令最初是使用C语言写的,后来使用perl语言,然后我根据我的命令查看了一下是C语言的,只有perl语言的rename才可以支持正则,那怎么办呢?能不能使用perl语言替换成C语言的rename,谷歌一下看了下,原来perl语言的rename使用的命令不一样,需要单独安装perl语言的rename,下面看一下perl语言的rename安装方法:

[root@wulaoer ngixn]# yum install epel-release -y #epel扩展包

[root@wulaoer ngixn]# yum install prename -y #安装prename包

安装成功之后我们测试一下perl语言的rename,这里需要注意perl语言的rename命令是prename,不是rename。还有一个,看网上有说判断rename是否是C语言还是perl语言使用man renme命令看第一行是RENAME(1) Linux Programmer’s Manual RENAME(1)还是RENAME(1) Perl Programmers Reference Guide RENAME(1),我测试了一下我的:

[root@wulaoer ngixn]# man rename

RENAME(1) User Commands RENAME(1)

NAME

rename - rename files

[root@wulaoer ngixn]# man prename

PRENAME(1) User Contributed Perl Documentation PRENAME(1)

NAME

prename - renames multiple files

不管是C语言的rename还是perl语言的rename,使用man rename都没有,我只能判断系统默认是C语言的rename,如果想使用perl语言的rename只能安装。下面看一下perl语言的rename使用方法:

[root@wulaoer ngixn]# prename 'y/a-z/A-Z/' *^C

[root@wulaoer ngixn]# ll

总用量 0

-rw-r--r-- 1 root root 0 1月 15 15:28 ACCESS_100.LOG

-rw-r--r-- 1 root root 0 1月 15 15:28 ACCESS_10.LOG

-rw-r--r-- 1 root root 0 1月 15 15:28 ACCESS_11.LOG

-rw-r--r-- 1 root root 0 1月 15 15:28 ACCESS_12.LOG

-rw-r--r-- 1 root root 0 1月 15 15:28 ACCESS_13.LOG

已经把所有小写字母替换成大写的,如果想把大写的替换成小写的,调整一下正则即可,下面我们尝试一下去掉".log"后缀

[root@wulaoer ngixn]# prename 's/\.log$//' *.log

[root@wulaoer ngixn]# ll

总用量 0

-rw-r--r-- 1 root root 0 1月 15 15:28 access_1

-rw-r--r-- 1 root root 0 1月 15 15:28 access_10

-rw-r--r-- 1 root root 0 1月 15 15:28 access_100

-rw-r--r-- 1 root root 0 1月 15 15:28 access_11

去掉了文件后缀,在给添加上去

[root@wulaoer ngixn]# prename 's/$/\.log/' *

[root@wulaoer ngixn]# ll

总用量 0

-rw-r--r-- 1 root root 0 1月 15 15:28 access_100.log

-rw-r--r-- 1 root root 0 1月 15 15:28 access_10.log

-rw-r--r-- 1 root root 0 1月 15 15:28 access_11.log

-rw-r--r-- 1 root root 0 1月 15 15:28 access_12.log

-rw-r--r-- 1 root root 0 1月 15 15:28 access_13.log

正则的基本使用方法应用有一个了解,这里着重说一下,rename和prename是两个语言,可以公用,但是需要注意命令,默认系统没有perl语言的prename,需要自己安装,C语言的rename没有正则,只有perl语言的rename才可以使用正则。没有了,看一些其他的吧!!!!!!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值