Linux中批量把文件名大小写转换
一哥们从现场打来急电说现在有一个目录,
目录下有上千个文件,现在需要把文件名由小写全部转化为大写。
首先不能写脚本,那样的话还要教他用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.
一定还有更方便的方法,
如果你遇到过请不吝赐教,谢谢!
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script> 阅读(1236) | 评论(7) | 转发(6) | 0
上一篇:oracle dblink应用
下一篇:正则表达式简述
personball2012-12-27 15:45:14
lgfang: 貌似我的rename在此不适用。你的rename肿木实现楼主的需求?
NAME
rename - rename files
SYNOPSIS
rename [options] expression replacement..... To translate uppercase names to lower, you'd use
rename 'y/A-Z/a-z/' *
回复 | 举报
personball2012-12-27 15:44:09
lgfang: 貌似我的rename在此不适用。你的rename肿木实现楼主的需求?
NAME
rename - rename files
SYNOPSIS
rename [options] expression replacement..... 看了下,ubuntu下的rename是perl脚本。。。
man 之后有一段
把所有文件名内含有大小字母的,修改为小写字母。
rename 'y/A-Z/a-z/' *
回复 | 举报
lgfang2012-12-25 10:08:39
personball: rename 泪目..... 貌似我的rename在此不适用。你的rename肿木实现楼主的需求?
NAME
rename - rename files
SYNOPSIS
rename [options] expression replacement file...
DESCRIPTION
rename will rename the specified files by replacing the first occurrence of expression in their name by replacement.
回复 | 举报
ran3guns2012-10-09 12:49:41
lgfang: 如果用的是bash:
for each in *; do name=${each%%.*}; ext=${each#*.}; echo $each ${name^^}.$ext; done
或者
for each in *; do name=${each%%.*}; ext=$..... 赞
回复 | 举报
personball2012-10-09 10:12:29
手头上么linux,给个在线的man手册参考吧:http://man.he.net/?topic=rename§ion=all
回复 | 举报
- 首页
- 上一页
- 1
- 2
- 下一页
- 末页
评论热议