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

Linux中批量把文件名大小写转换,第1张

linux中批量把文件名大小写转换一哥们从现场打来急电说现在有一个目录,目录下有上千个文件,现在需要把文件名由小写全部转化为大写。首先不能写脚本,那样的话还要教他用vi,

改权限,只能用命令了。字符转换嘛,当然想到的是

tr

www.dnjsb.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.dnjsb.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.dnjsb.com

do

mv

$file

`echo

$file

|

sed

-e

s//.TXT//.txt/g

`done但是/.并没有被转义成.,

而依然是代表任意字符,这样的话如果basename中含有扩展名就悲剧了。

试了几下发现这样才是转义的:

sed

-e

s/[.]TXT/.txt/g

`ok.

将文件名作为程序的参数,

这个就是位置变量了哦,比如$1。

如果要将字符转化的话,

就是用tr了转换了,

比如tr

A-Z

a-z

如果楼主不懂的话,

就私下交流了。

当然,

以后要是遇到了Linux服务器的问题,

shell编程问题,

linux系统管理,

等等的问题,

也都可以一起研究啊!

windows有个设置,默认是选上的,就是要是一个文件名全部是大写字母,就自动变成全是小写

这是因为在以前的dos系统里文件名只能是大写,自己输入小写也自动当成大写处理,但是在windows里支持小写文件名,这样不太符合windows的习惯

就是说,在windows里看着是大写,实际上本来就是小写,解决方法是可以在linux里改成大写,或者在windows里去掉那个设置,具体记不清了,大概是在文件夹选项里!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/9025913.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-24
下一篇 2023-04-24

发表评论

登录后才能评论

评论列表(0条)

保存