[쉘스크립트] 압축해제(tar,zip,rar)

이건 몇달 전부터 만들어 쓰던건데..

그냥 개삽질해서 확장자를 얻어내는거라 상당히 소스가 더럽습니다 -_-

지금 고칠려면 더 잘고칠수 있긴한데 안그래도 뭐 잘 동작하는데.. 하고 걍 방치중입니다...;;


바로 위에 소스가 이게 필요하기 때문에 같이 올립니다..

사용법 > 파일이름(저 소스파일)  압축파일
         파일이름(저 소스파일)  압축파일 압축을풀위치

#!/bin/bash

# 지원하는 파일들은 다음과 같습니다
# zip,alz,rar,tar.gz,tar,tar.bz2,gz,tgz
# 물론 unalz,unzip,unrar,tar등이 설치되어 있어야 합니다
# (첫번째 인자의)파일의 확장자를 찾아내서 처리합니다..
# 두번째 인자가 없으면 디폴트로 처리
# 만약 두번째 인자가 있으면 두번째 인자의 디렉토리에 압축을 푼다
# 그리고 *.jpg *.gif 파일은 cover 디렉토리를 만든다음에 다 거기다 처박아

# IFS 인자를 백업후 .을 IFS인자로 설정
OLD_IFS=$IFS
IFS='.'

Move_Picture()
{
mkdir cover
mv *.jpg *.gif *.png cover
}

# 첫번째 인자를 변수에 넣고 .을 간격자로한 갯수를 구한다
ARG1=($1)
ARRAY_SIZE=$(expr ${#ARG1[*]} - 1)

if (( $ARRAY_SIZE == -1));then
echo "인자가 부족합니다.."
echo "사용법 : $0 파일명 (압축을 풀)경로"
exit 1
fi

# 파일의 확장자를 정한다 (맨뒤에꺼만 아면 된다
# tar.gz같은경우도 gz면 되기때문에 맨마지막만 검사한다
if [ "${ARG1[$ARRAY_SIZE]}" = "zip" ];then
EXTENSION="zip"
elif [ "${ARG1[$ARRAY_SIZE]}" = "rar" ];then
EXTENSION="rar"
elif [ "${ARG1[$ARRAY_SIZE]}" = "alz" ];then
EXTENSION="alz"
elif [ "${ARG1[$ARRAY_SIZE]}" = "tar" ];then
EXTENSION="tar"
elif [ "${ARG1[$ARRAY_SIZE]}" = "gz" ];then
EXTENSION="gz"
elif [ "${ARG1[$ARRAY_SIZE]}" = "tgz" ];then
EXTENSION="tgz"
elif [ "${ARG1[$ARRAY_SIZE]}" = "bz2" ];then
EXTENSION="bz2"
else
echo "지원되지 않는 압축파일입니다 확장자를 확인해 주세요!"
echo "지원되는 압축파일 : ZIP,RAR,ALZ,TAR,GZ(or tar.gz),BZ2(or tar.bz2)"
exit 1
fi

# IFS를 복원
IFS=$OLDIFS

# IFS를 복원했기때문에 원래 인자들이 대입된다
# 그리고 전체 인자 갯수를 구해서, 압축을 풀
# 장소가 command 에 있는지 검사하고 실행한다
ARG1=($1)
ARG2=($2)
ARG_NUM=$#

# (경로)인자가 존재하지 않는다면
if(($ARG_NUM == 1));then
if [ "$EXTENSION" = "zip" ];then
unzip $ARG1
elif [ "$EXTENSION" = "rar" ];then
unrar e -d $ARG1
elif [ "$EXTENSION" = "alz" ];then
unalz $ARG1
elif [ "$EXTENSION" = "tar" ];then
tar -xvf $ARG1
elif [ "$EXTENSION" = "gz" ];then
tar -xvzf $ARG1
elif [ "$EXTENSION" = "tgz" ];then
tar -xvzf $ARG1
elif [ "$EXTENSION" = "bz2" ];then
tar -xvjf $ARG1
fi
# 존재한다면 경로대로 압축을 해제시킨다
elif(($ARG_NUM == 2));then
if [ "$EXTENSION" = "zip" ];then
unzip $ARG1 -d $ARG2
elif [ "$EXTENSION" = "rar" ];then
mkdir $ARG2
cd $ARG2
unrar x $OLDPWD/$ARG1
Move_Picture
cd $OLDPWD
elif [ "$EXTENSION" = "alz" ];then
unalz $ARG1 $ARG2
elif [ "$EXTENSION" = "tar" ];then
tar -xvf $ARG1 -C $ARG2
elif [ "$EXTENSION" = "gz" ];then
tar -xvzf $ARG1 -C $ARG2
elif [ "$EXTENSION" = "tgz" ];then
tar -xvzf $ARG1 -C $ARG2
elif [ "$EXTENSION" = "bz2" ];then
tar -xvjf $ARG1 -C $ARG2
fi
Move_Picture
fi