删除一系列文件

本文详细介绍了在ksh和bash两种Shell环境下实现删除一系列相同类型文件的方法,通过比较两种环境下的脚本实现,揭示了语法和工具使用上的差异。文中提供了一个用于在ksh环境中删除文件序列的脚本示例,并在bash环境下进行了等效实现,旨在帮助开发者理解并应用这两种Shell的不同特性。

以下两个脚本分别在ksh和bash上实现删除一系列文件。在语法和shell工具上有一定区别:

ksh下实现:

#################################################################################
#       Developed by Jacking to delete the same tpye files in sequence          #
#       example:                                                                #
#               del_seq_file.sh S009505.LOG S0096911.LOG                        #      
#                                                                               #
#       then the logs from S009505.LOG to S0096911.LOG will be deleted.         #
#################################################################################

#!/usr/bin/ksh


if [ $# -ne 2 ]
then
        echo "Usage:"
        echo "\t$0 file1 file2"
        echo "the file1 and file2 should be the same in suffix."
        exit 1
fi

BEGIN_FILE=$1
END_FILE=$2

SUFFIX1=${BEGIN_FILE##*.}
#echo $SUFFIX1
SUFFIX2=${END_FILE##*.}
#echo $SUFFIX2

if [ $SUFFIX1 != $SUFFIX2 ]
then
        echo "Error: $BEGIN_FILE is not the same type as $END_FILE."
        exit 2
fi

len=${#BEGIN_FILE}
i=$len

#ksh don't use for((i=$len;i>0;i--))
while [[ $i -ge 0 ]]
do
 sub_str=$(echo "$BEGIN_FILE" | cut -c1-$i)
        if echo "$END_FILE" | grep -qF "$sub_str"
        then
                MAX_STR=$(echo "$BEGIN_FILE" | cut -c1-$i)  #${BEGIN_FILE:0:$i}
                #echo "max str is '$MAX_STR'"
                break
        fi
 (( i-=1 ))
done

BEGIN_NUM=${BEGIN_FILE#$MAX_STR}
#echo $BEGIN_NUM;
BEGIN_NUM=${BEGIN_NUM%.$SUFFIX1}
#echo $BEGIN_NUM;
if echo "$BEGIN_NUM" | egrep -q '^([0-9])+$'
then
        :
else
        echo "Sequence: $BEGIN_FILE ~ $END_FILE. Error begin with $BEGIN_FILE."
        exit 3
fi


END_NUM=${END_FILE#$MAX_STR}
END_NUM=${END_NUM%.$SUFFIX1}
if echo "$END_NUM" | egrep -q '^([0-9])+$'
then
        :
else
        echo "Sequence: $BEGIN_FILE ~ $END_FILE. Error end with $END_FILE."
        exit 3
fi

RM_NUM=0
LEN=${#END_NUM}
RM_FILE=""
i=$BEGIN_NUM

#for ((i=$BEGIN_NUM; i<=$END_NUM; i++))
while [[ $i -le $END_NUM ]]
do
        #RM_FILE="$MAX_STR""$i"".$SUFFIX1"
        RM_FILE=$(printf "${MAX_STR}%0${LEN}d.$SUFFIX1" $i)
        if [ -e $RM_FILE ]
        then
                #echo "delete $RM_FILE"" yes"
                rm -f $RM_FILE
                RM_NUM=$((RM_NUM+1))
        else
                #echo "delete $RM_FILE"" no"
                :
        fi
 (( i+=1 ))
done


echo "\ndelete $RM_NUM files."

 

bash下实现:

#################################################################################
#       Developed by Jacking to delete the same tpye files in sequence          #
#       example:                                                                #
#               del_seq_file.sh S009505.LOG S0096911.LOG                        #
#                                                                               #
#       then the logs from S009505.LOG to S0096911.LOG will be deleted.         #
#################################################################################

#!/bin/sh


if [ $# -ne 2 ]
then
        echo "Usage:"
        echo -e "\t$0 file1 file2"
        echo "the file1 and file2 should be the same in suffix."
        exit 1
fi

BEGIN_FILE=$1
END_FILE=$2

SUFFIX1=${BEGIN_FILE##*.}
#echo $SUFFIX1
SUFFIX2=${END_FILE##*.}
#echo $SUFFIX2

if [ $SUFFIX1 != $SUFFIX2 ]
then
        echo "Error: $BEGIN_FILE is not the same type as $END_FILE."
        exit 2
fi

len=${#BEGIN_FILE}

for((i=$len;i>0;i--))
do
        if echo "$END_FILE" | grep -qF "${BEGIN_FILE:0:$i}"
        then
                MAX_STR=${BEGIN_FILE:0:$i}
                #echo "max str is '$MAX_STR'"
                break
        fi
done

BEGIN_NUM=${BEGIN_FILE#$MAX_STR}
#echo $BEGIN_NUM;
BEGIN_NUM=${BEGIN_NUM%.$SUFFIX1}
#echo $BEGIN_NUM;
if echo "$BEGIN_NUM" | grep -q '^[0-9]\+$'
then
        :
else
        echo "Sequence: $BEGIN_FILE ~ $END_FILE. Error begin with $BEGIN_FILE."
        exit 3
fi


END_NUM=${END_FILE#$MAX_STR}
END_NUM=${END_NUM%.$SUFFIX1}
if echo "$END_NUM" | grep -q '^[0-9]\+$'
then
        :
else
        echo "Sequence: $BEGIN_FILE ~ $END_FILE. Error end with $END_FILE."
        exit 3
fi

RM_NUM=0
LEN=${#END_NUM}
RM_FILE=""
for ((i=$BEGIN_NUM; i<=$END_NUM; i++))
do
        #RM_FILE="$MAX_STR""$i"".$SUFFIX1"
        RM_FILE=$(printf "${MAX_STR}%0${LEN}d.$SUFFIX1" $i)
        if [ -e $RM_FILE ]
        then
                #echo "delete $RM_FILE"" yes"
                rm -f $RM_FILE
                RM_NUM=$((RM_NUM+1))
        else
                #echo "delete $RM_FILE"" no"
                :
        fi
done


echo -e "\ndelete $RM_NUM files."



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值