[쉘스크립트] 압축해제(tar,zip,rar)
Programming/Shell script 2008. 2. 13. 20:47
이건 몇달 전부터 만들어 쓰던건데..
그냥 개삽질해서 확장자를 얻어내는거라 상당히 소스가 더럽습니다 -_-
지금 고칠려면 더 잘고칠수 있긴한데 안그래도 뭐 잘 동작하는데.. 하고 걍 방치중입니다...;;
바로 위에 소스가 이게 필요하기 때문에 같이 올립니다..
사용법 > 파일이름(저 소스파일) 압축파일
파일이름(저 소스파일) 압축파일 압축을풀위치
그냥 개삽질해서 확장자를 얻어내는거라 상당히 소스가 더럽습니다 -_-
지금 고칠려면 더 잘고칠수 있긴한데 안그래도 뭐 잘 동작하는데.. 하고 걍 방치중입니다...;;
바로 위에 소스가 이게 필요하기 때문에 같이 올립니다..
사용법 > 파일이름(저 소스파일) 압축파일
파일이름(저 소스파일) 압축파일 압축을풀위치
#!/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
'Programming > Shell script' 카테고리의 다른 글
Screenlet 에 현재 재생중인 음악파일 커버 출력시키기 (6) | 2010.06.20 |
---|---|
mplayer 백그라운드 실행법 (3) | 2009.01.28 |
Bash 쉘스크립트 배열 (9) | 2009.01.12 |
Mplayer로 workspace이동하기 (2) | 2008.02.20 |
[쉘스크립트]자막파일 이름 안바꾸고 애니보기 (4) | 2008.02.14 |