linux下递归修改子目录内的文件名

有时候,需要修改某个文件夹内的所有某个扩展名的文件的文件名,比如大小写互转。那么我们就需要获取所有的相关文件名,然后进行重命名。获取相关文件名的绝对路径名可以用find命令,而修改文件名则使用mv命令,至于循环的处理,则只能使用awk这种程序语言来进行处理。

例子:当前文件夹下,所有以.PCM为扩展名的文件都是大写,我们要把它们都转为小写。命令为:

$ find $PWD -regex .*PCM | awk -f ../rename.awk.txt

1. $PWD为当前文件夹,是bash的获取变量的方法。 -regex表示正则表达式匹配文件名。

2. rename.awk.txt的内容如下:

$0 ~/PCM$/{oldpath = $0; strnum = split($0, myarray, "/");myarray[strnum] = tolower(myarray[strnum]);newpath = ""; for (i=1;i<=strnum;i++){if (myarray[i] != ""){newpath = newpath "/" myarray[i]}}; cmd = "mv " oldpath " " newpath; system(cmd);}

  • $0表示输入行,即文件的绝对路径名。$0 ~ /PCM$/表示绝对路径名的末尾是PCM的情况下,执行以下操作。
  • oldpath变量记录原始的文件名。
  • split函数对原始文件绝对路径进行分割,放到数组myarray中,并且返回数组元素的数量到strnum。该操作是为了获得文件名,为了后边大写变小写。
  • tolower()函数将字符串的所有大写字母变为小写;toupper()刚好相反。
  • 通过for循环,生成新的文件绝对路径。注意,awk的字符串链接很简单,直接串,连加号都不用。
  • 使用mv命令来实现重命名。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值