当前位置:编程学习 > php >>

Linux中批量把目录内文件名转换大小写用tr

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

Linux下批量将文件名由大写转小写


如何将一个目录中所有文件名由大写变为小写
我们以目录 tmp 为例

1. 进入 tmp 目录的上一级目录
2. zip -r tmp.zip tmp/*
3. mv tmp tmp-old (这是为了安全起见,此处也可改为 rm -r -f tmp )
4. unzip -LL tmp.zip

这样,tmp 目录中的文件名就全改为小写了。在确认无误后,可将 tmp-old 目录删除。


===============================================

 

linux命令实现批量处理文件的大小写转换 

把一个文件里的大写字母都转换成小写
tr A-Z a-z <file

把文件夹下所有文件的首字母转换成大写字母
ls  | awk '{print "mv "$0" "  toupper(substr($0,0,2))""substr($0,2) }' | /bin/bash

 

=====================================
 
 
一哥们从现场打来急电说现在有一个目录,
 
目录下有上千个文件,现在需要把文件名由小写全部转化为大写。
 
 
 
首先不能写脚本,那样的话还要教他用vi,  改权限,只能用命令了。
 
字符转换嘛,当然想到的是 tr :  
 
 
 
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 支持变量:   
 
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 *;   
 
do mv $file `echo $file |
 
         sed -e s/.TXT/.txt/g  `;
 
done
 
但是.并没有被转义成., 而依然是代表任意字符,
 
这样的话如果basename中含有扩展名就悲剧了。
 
 
试了几下发现这样才是转义的:
 
             sed -e s/[.]TXT/.txt/g  `;
 
ok.

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,