- 论坛徽章:
- 0
|
最近复习shell编程,搞了个递归实现批量转换文件名大小写的脚本,放在这里做个备份。具体用法:
Usage: ./switchcase.sh -direct item1 item2 ...
direct: u -- to upcase\(default\), l -- to lowcase
item1 item2 ...: dirs you want\(default is current dir.\)
#!/bin/bash
#批量转换文件名大小写
#by YangJie 2008-08-19
traversal()
{
COUNT=0
for curitem in $*
do
if [ -d $curitem ]
then
cd $curitem
# echo "curitem is $curitem, currrent dir is $PWD"
traversal `ls $PWD`
for item in `ls -F $PWD | grep \/` #找当前目录下所有的目录
do
echo -e "\033[1;36;40m[ $curitem:\033[1;34;40m Moving `basename $item` to `basename $item | $direct` ...\033[1;36;40m]\033[0m"
mv -f `basename $item` `basename $item | $direct`
done
cd ..
else
echo -e "\033[1;36;40m[ `basename $PWD`:\033[0mMoving $curitem to `basename $curitem | $direct` ... \033[1;36;40m]\033[0m"
mv -f $curitem `basename $curitem | $direct`
fi
done
}
args=$#; #参数个数──$#
[ $args -lt 1 ] && { echo "Usage: $0 -direct item1 item2 ..."; \
echo "direct: u -- to upcase\(default\), l -- to lowcase";\
echo "item1 item2 ...: dirs you want\(default is current dir.\)";\
exit 1; }
direct="tr [a-z] [A-Z]" ;
if [ X$1 = X'-u' ]
then
shift
fi
#去掉参数用shift
if [ X$1 = X'-l' ]
then
direct="tr [A-Z] [a-z]"
shift
fi
#echo "item is $item,args is $args"
#批量更改
traversal $*
#最后更改参数列表里面的目录
for it in $*
do
mv -f `basename $it` `basename $it | $direct`
done
exit 0;
# (End)
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/76620/showart_1133743.html |
|