Chinaunix首页 | 论坛 | 博客
  • 博客访问: 687017
  • 博文数量: 771
  • 博客积分: 5000
  • 博客等级: 大校
  • 技术积分: 4910
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-18 11:35
文章分类

全部博文(771)

文章存档

2011年(1)

2008年(770)

我的朋友

分类:

2008-09-18 11:37:02

--------------------------------------------------------------------
[010目录结构]
--------------------------------------------------------------------
.
|-- book-2008-08-25
|-- install.sh
|-- png-jpg.sh
`-- readme

0 directories, 4 files

--------------------------------------------------------------------
[./readme]
--------------------------------------------------------------------
程序名称:
png-jpg批量格式转换

程序功能:
批量转换png格式文件为jpg格式文件

安装方法:
./install.sh

使用说明:
1.png-jpg.sh
运行:
png-jpg.sh

注意:
1.
运行程序期间会强行删除当前目子录或文件convert-`date '+%F'`
重名的jpg文件和转换后的jpg文件将放在子目录convert-`date '+%F'`里
当前目录的png文件将自动删除
2.
个人应用,功能有限

总结:
1.
只考虑字符串匹配比较的情况:
    echo "当前目录共有`ls -p | grep '[^/]$' | wc -l`个文件"
    echo "jpg文件个数:`ls -p | grep '[^/]$' | grep '.jpg$' | wc -l`"
    echo "png文件个数:`ls -p | grep '[^/]$' | grep '.png$' | wc -l`"
    echo "其它文件如下:"
    echo "`ls -p | grep '[^/]$' | grep -v '.jpg$' | grep -v '.png$'`"
后来改进成用file命令验证是否为png格式文件


--------------------------------------------------------------------
[./install.sh]
--------------------------------------------------------------------
#!/bin/sh

info="安装文件缺失,安装过程中断!"
name="png-jpg批量格式转换"
installdir="/usr/local/bin/"

if [ ! -e png-jpg.sh ] ; then
    echo "$info"
    exit 1
fi

chmod +x png-jpg.sh
cp png-jpg.sh "$installdir"

echo "$name安装成功!"
exit 0

--------------------------------------------------------------------
[./png-jpg.sh]
--------------------------------------------------------------------
#!/bin/sh

tofile=
i=0
deco="--------------------------------------------"
bakfile="convert-`date '+%F'`"
flag=0
filetype=
filenum=0
baknum=0
temp1=0
temp2=0

type_is()
{
# $1= file_type_message $2= file_name
    if [ $# -ne 2 ] ; then
    echo "error occured in type_is function!"
    echo "usage: type_is file_type_message file_name"
    exit 1
    fi
    filetype=`file "$2"`
    filetype="${filetype#* }"
    echo "$filetype" | grep -q "$1"
    return $?
}

type_num()
{
# $1= file_type_message
    if [ $# -ne 1 ] ; then
        echo "error occured in type_num function!"
        echo "usage: type_num file_type_message"
        exit 1
    fi
    filenum=0
    for name in *
    do
    if [ -f "$name" ] ; then
        type_is "$1" "$name"
        if [ $? -eq 0 ] ; then
        filenum=$(($filenum+1))
        fi
    fi
    done
    return $filenum
}


statistics()
{
    echo
    echo "$deco"
    if [ $(($flag%2)) -eq 0 ] ; then
    echo "[转换前的情况]"
    else
    echo "[转换后的情况]"
    fi
    flag=$(($flag+1))
    echo "当前目录共有`ls -p | grep '[^/]$' | wc -l`个文件"
    type_num "JPEG image data"
    echo "jpg文件个数:$?"
    type_num "PNG image data"
    temp1=$?
    echo "png文件个数:$temp1"
    if [ $temp1 -eq 0 ] && [ $flag -eq 1 ] ; then
    echo "当前目录下png格式文件数目为0,无需转换"
    echo "程序退出"
    exit 1
    fi
    echo "其它文件如下:"
    for name in *
    do
    if [ -f "$name" ] ; then
         type_is "JPEG image data" "$name"
        temp1=$?
        type_is "PNG image data" "$name"
        temp2=$?
        if [ $temp1 -ne 0 ] && [ $temp2 -ne 0 ] ; then
        echo "$name"        
        fi
    fi
    done
    echo "$deco"
    echo
}

rm -f *~

if [ -e "$bakfile" ] ; then
    echo "删除当前目录的文件或文件夹$bakfile"
    rm -R "$bakfile"
fi

statistics

echo "转换中..."

for name in *
do
    if [ -f "$name" ] ; then
    type_is "PNG image data" "$name"
    if [ $? -eq 0 ] ; then
        tofile=${name%%.*}".jpg"
        if [ -e "$tofile" ] ; then
        if [ ! -e "$bakfile" ] ; then
            mkdir "$bakfile"
            echo "在当前目录创建文件夹$bakfile"
            fi
            echo "目标文件$tofile已存在,转换后的$tofile和原需转换的文件将放在当前子目录$bakfile,原需转换的文件将添加old后缀"
            convert "$name" "$bakfile"/"$tofile"
            if [ $? -eq 0 ] ; then
            i=$(($i+1))
            baknum=$(($baknum+1))
            fi
        mv "$tofile" "$bakfile"/"$tofile".old
        else        
            convert "$name" "$tofile"
            if [ $? -eq 0 ] ; then
            i=$(($i+1))
            fi
        rm -f "$name"
        fi
    fi
    fi
done

statistics
echo "已转换png格式到jpg格式的文件个数:$i"
echo "$bakfile里已转换的同名jpg文件数目为$baknum"

echo "转换完毕!"

--------------------next---------------------

阅读(603) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~