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才可以使用正则。没有了,看一些其他的吧!!!!!!!!!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,您的问题是关于C语言的文件删除函数remove()和文件重命名函数rename()的使用方法。 首先让我们来了解一下这两个函数的作用: 1. remove()函数:用于删除文件,其函数原型为:int remove(const char *filename)。其,filename为要删除的文件名,函数返回值为0表示删除成功,返回值为-1表示删除失败。 2. rename()函数:用于重命名文件,其函数原型为:int rename(const char *oldname, const char *newname)。其,oldname为原文件名,newname为新文件名,函数返回值为0表示重命名成功,返回值为-1表示重命名失败。 接下来我们分别介绍一下这两个函数的使用方法。 1. remove()函数的使用方法: ```c #include <stdio.h> int main() { char filename[50]; printf("请输入要删除的文件名:"); scanf("%s", filename); if (remove(filename) == 0) { printf("文件删除成功!\n"); } else { printf("文件删除失败!\n"); } return 0; } ``` 上述代码,我们先通过scanf()函数获取用户输入的要删除的文件名,然后使用remove()函数删除文件,并根据函数返回值输出对应的提示信息。 注意:在使用remove()函数删除文件时,要确保该文件存在并且有删除权限,否则将无法成功删除文件。 2. rename()函数的使用方法: ```c #include <stdio.h> int main() { char oldname[50]; char newname[50]; printf("请输入原文件名:"); scanf("%s", oldname); printf("请输入新文件名:"); scanf("%s", newname); if (rename(oldname, newname) == 0) { printf("文件重命名成功!\n"); } else { printf("文件重命名失败!\n"); } return 0; } ``` 上述代码,我们先通过scanf()函数获取用户输入的原文件名和新文件名,然后使用rename()函数重命名文件,并根据函数返回值输出对应的提示信息。 注意:在使用rename()函数重命名文件时,要确保原文件名存在并且有重命名权限,否则将无法成功重命名文件。 希望以上介绍能够帮助您理解C语言的文件删除函数remove()和文件重命名函数rename()的使用方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值