Linux中批量把文件名大小写转换

Linux中批量把文件名大小写转换
 
一哥们从现场打来急电说现在有一个目录,
目录下有上千个文件,现在需要把文件名由小写全部转化为大写。
 
首先不能写脚本,那样的话还要教他用vi,  改权限,只能用命令了。
字符转换嘛,当然想到的是 tr :  www.2cto.com  
 
for file in * ;
do mv  $file `echo $file |  tr 'a-z' 'A-Z'`;
done
 
过了一会儿这哥们又打电话说,扩展名不要改为大写的,保留为小写就行了。
这样明显分段的事情当然要交给 awk 了:
 
for file in *;
do mv $file `echo $file | awk -F . '{print toupper($1)"."$2}' `;
done
 
这样是可以把类似 a.txt 的文件修改了,但有多个扩展名的就没招了,比如 b.tar.gz,
还好 awk 支持变量:  www.2cto.com  
for file in *;
do mv $file `echo $file |
awk -F . ' {
                       for (i = 1; i <= NF;i++)
                                  if (i == 1) 
                                        result = toupper($i);
                                 else
                                       result += "."$i;
                         print $result;
               }' `;
done
但结果是错的,一个文件名也没有改变,
查了下说gawk才支持toupper, tolower,
换成gawk 还是不对。
 
最后没办法只好找个折衷的方法,先全部转化为大写,然后再将扩展名转回小写:
for file in *;  www.2cto.com  
do mv $file `echo $file |
         sed -e s/\.TXT/\.txt/g  `;
done
但是\.并没有被转义成., 而依然是代表任意字符,
这样的话如果basename中含有扩展名就悲剧了。
 
试了几下发现这样才是转义的:
             sed -e s/[.]TXT/.txt/g  `;
ok.
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值