Linux 下批量改变文件的名字的大小写

需求:某个文件夹下所有的文件名字里的大写字母改成小写字母。(文件的数量很大有近百万)

解决:
for file in `ls  | grep '[A-Z]'`
do
 str=`echo $file|tr  'A-Z' 'a-z'`
 mv $file $str
done


1)ls | grep '[A-Z]' :ls 出所有含有大写字母的文件
2)for file in ` command` :for 循环
3)echo AVdxFV | tr 'A-Z'  'a-z' : 把'AVdxFV' 中所有的大写换成小写字母; tr :translate的意思,具体看help

问题: 上面的方法,如果是解决文件名字基本正常的文件是没问题的,但是如果文件中含有空格或者,以‘-’开头的文件名字,就有问题了。
我从网上找了几种办法:

方法一: 这个方法很巧妙,但是我担心文件太多话的,会很慢,所以没敢用,

来自
kaixinsuancai
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 目录删除。

一定可以的。

方法二:
  rename 'y/A-Z/a-z/' *
这个可以直接在命令行,也可以在perl中, *表示当前目录的所有文件。

可是由于偶的rename版本太低(2000),没法用,2007版本的应该没问题了...我看他们的manpage 都使用的这例子

方法三:
来自:lbaby
for f in *
do
nf=`echo $f | tr 'A-Z' 'a-z'`
echo $nf
[ "$f" != "$nf" ] && mv ./"$f" ./"$nf"
done


和偶自己的方法应该是一样的思想,,但是在for 循环的条件中,我用grep ....不知道这是不是问题所在


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值