需求:某个文件夹下所有的文件名字里的大写字母改成小写字母。(文件的数量很大有近百万)
解决:
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 ....不知道这是不是问题所在
解决:
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 ....不知道这是不是问题所在