失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Linux批量文件名大小写转换 Linux中批量把文件名大小写转换

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

时间:2024-07-07 08:35:44

相关推荐

Linux批量文件名大小写转换 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.

一定还有更方便的方法,

如果你遇到过请不吝赐教,谢谢!

如果觉得《Linux批量文件名大小写转换 Linux中批量把文件名大小写转换》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。