提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
自用shell递归解压脚本
#! /bin/sh
function RecurseUnZip()
{
curFileList=()
path=$1
curFileList=`ls $path`
if [ -f $1 ]; then
path=${1%/*}
elif [ -d $1 ]; then
path=$1
else
echo "Invalid path=$path deepLevel:$deepLevel"
exit
fi
deepLevel=`expr $2 + 1`
for file in ${curFileList[@]}; do
curFileName=$path/$file
if [ -d $curFileName ]; then
RecurDeComp $curFileName $deepLevel
else
if [[ "$curFileName" != *.tar.gz ]] && \
[[ "$curFileName" != *.tar ]] && \
[[ "$curFileName" != *.rar ]] && \
[[ "$curFileName" != *.zip ]]; then
continue
fi
echo "$curFileName deepLevel:$deepLevel"
#对每种类型的压缩包进行解压
if [[ "$curFileName" == *.zip ]]; then
dirName=${curFileName%.zip}
mkdir $dirName
unzip -d$dirName $curFileName
sync
fi
if [[ "$curFileName" == *.tar.gz ]]; then
dirName=${curFileName%.tar.gz}
mkdir $dirName
tar zxvf $curFileName -C $dirName
sync
fi
if [[ "$curFileName" == *.tar ]]; then
dirName=${curFileName%.tar}
mkdir $dirName
tar xvf $curFileName -C $dirName
sync
fi
if [[ "$curFileName" == *.rar ]]; then
dirName=${curFileName%.rar}
mkdir $dirName
unrar x $curFileName $dirName
sync
fi
#只保留最顶层的压缩包
if [ $deepLevel -gt 1 ]; then
rm $curFileName
fi
RecurDeComp $dirName $deepLevel
fi
done
}
deepLevel=0
if [ $# -eq 0 ]; then
workSpace=./
elif [[ "$1" == */ ]] && [[ -d $1 ]]; then
workSpace=${1%/*}
elif [[ "$1" == */* ]] && [[ -f $1 ]]; then
workSpace=$1
elif [ -f $1 ]; then
workSpace=./$1
elif [ -d $1 ]; then
workSpace=$1
else
echo "ERROR! $workSpace File Not Found!"
exit
fi
if [ $# -eq 2 ]; then
deepLevel=$2
fi
RecurseUnZip $workSpace $deepLevel
总结
只保留最上层的压缩包,仅支持tar/tar.gz/zip/rar包。
使用时将脚本命名为RecurDeComp,将脚本mv到/usr/bin下或将路径添加到PATH中,用于实现递归调用。