[쉘스크립트]자막파일 이름 안바꾸고 애니보기


 한  보름정도 써봤는데 제대로 작동 잘  하는거 같군요..

그래서 한번 소스 올려봅니다..

간단히 소게 하자면

1 지정된디렉토리로 이동해서 영상파일을 헤더랑 테일 짜른거 보여준후에

2 숫자로 선택하게 하는겁니다

3 옵션으로 찾는 숫자에 해당하는 압축파일을 보여준뒤에 압축풀고

4 나온 smi파일을 파싱해서

5 그걸 동영상파일이랑 이름만 같게한후 자동으로 mplayer로 틀어주는 역활을 합니다..

일단 "작동하는데만" 신경을 썻기 때문에 버그가 꽤 많을겁니다..

주석으로 대충 적어놨는데 몇개 더 있을지도 모르겠네요..

이거 덕분에 애니보기도 쉬워졌네요 일일이

1 영상파일 복사 -> smi압축파일 해제 -> smi 이름바꾸기 -> 동영상 플레이 할필요가 없어졌네요 하핫..

지금 소스 자체가 너무 허술한데.. 뭐 그래도 작동은 제대로 하니깐 잘 봐줘요..

사용법은> 프로그램이름 07
이런식으로 뒤에 '화' 수만 적어주면 됩니다..
<
cd "$HOME/ani" 은 알아서 수정해 주세요>
#!/bin/bash

# VERSION 0.01
# ------------ 추가할것들 ----------------
# Get_Subtitle
# 1,모든 필드를 얻는다 해당 숫자가 포함된것만 자막을 검색하게 추가할것
# 일단 다 만들고 출력은 따로 한다
# (파일이 하나일경우 걍 안보여주고 하려고함)
# 2,선택되지 않는 파일은 루프를 돌려서 삭제한다
# 한 압축파일에 여러 smi들이 있을때 유용
# 근데 이렇게 파려면 모든 데이터를 배열에 넣어야 되는데..;
#
# Get_Filename
# $1중에 없다면 아예 출력을 말게 해야되 <-이거할것 꼭 필요한건 아니지만..
#
# 기타
# 입력받을때 에러 확인할것! (전담함수 추가 바람)
# argument 가능하게 할까?

SUBTUTILE_SUFFIX="smi"
FILE_EXT="$HOME/bin/file_extracter.sh"

cd "$HOME/ani"

if [ $# -ne 1 ];then
echo "Useage: $0 search_file"
exit
fi

function Run_Program()
{
mplayer "$movie_filename" >/dev/null 2>/dev/null &
}

function Clear_Screen()
{
# 지극히 개인적인 옵션 지우고 싶으면 지우셈
clear
echo -e "\n\n\n\n\n"
}

function Get_Subtitle()
{
local cnt=1
local array_cnt=0
local num=1
declare -a array

# fe 내 전용 압축해제 스크립트)
set $($FILE_EXT "$1" | grep -i .smi)

while [ $# -gt 0 ];do
if [ $cnt -gt 1 ];then
string="$string $1"
case "$1" in
*.smi | *.SMI )
# 첫번째 공백제거 (여기서부터가 진정한 데이터)
echo "$(($array_cnt + 1)) - "${string:1}""
array[$array_cnt]="${string:1}"
((array_cnt++))
((cnt=0))
string=""
esac
fi
((cnt++))
shift
done

# 만약 파일이 하나라면 그냥 물어보지 말고 바로 리턴
if [ $array_cnt -eq 1 ];then
ret=${array[0]}
return
else
echo -n "choice number :";read num
fi

ret=${array[$num-1]}
}

# 문자열을 받으면 [],(),{} 사이의 문자를 없애주는 함수
# 이것은 오직 출력할때만 쓰여야만 한다
function Delete_Bracket()
{
# 확장자 백업
local subfix="${1##*.}"
# 확장자 제거 (head,tail 검사위해서)
ret="${1%.*}"
# head 재거
ret=${ret#\[*\]}
ret=${ret#\(*\)}
# tail 제거
ret=${ret%\[*\]}
ret=${ret%\(*\)}
ret="${ret} ----- $subfix"
}

function Get_Filename()
{
local i=0
local loop_filename=""
local num=1
declare -a file_array

for loop_filename in ''$1''
do
Delete_Bracket "$loop_filename"
case "$ret" in
*"$2"* )
echo $(($i+1)) - "$ret"
file_array[$i]="$loop_filename"
((i++))
esac
done
echo -n "choice number :";read num
ret=${file_array[$num-1]}
}

# MAIN
# 깨끗히 하고 시작
Clear_Screen

# 동영상파일과 자막파일을 선택하게 하고 변수에 저장
Get_Filename "*$1*.avi *$1*.mkv *$1*.wmv" "$1"
movie_filename="$ret"
subtitle_filename="${movie_filename%.*}.$SUBTUTILE_SUFFIX"

# 자막파일이 있으면 실행하고 걍 스크립트 종료
if [ -f "$subtitle_filename" ];then
Clear_Screen
Run_Program
exit
fi

# $1의 조건에 해당되는 압축파일(zip,rar) 을 출력하고 선택하게 한다
Get_Filename "*$1*.zip *$1*.rar" "$1"
comp_filename="$ret"

# 압축을 푼다
Get_Subtitle "$comp_filename" "$1"
comp_subtitle_filename="$ret"

# 선택된.smi 파일을 동영상.smi로 이름을 바꾼다
mv "$comp_subtitle_filename" "$subtitle_filename"

# 이제 애니보자!
Clear_Screen
Run_Program

#프로그램 종료전 전에 있던 디렉토리로 재이동
cd $OLDPWD

몇일동안 쉘스크립트 건드리면서 느끼는건데 어지간한건 C 안쓰고 걍 쉘스크립트로 다 해결가능한거 같군요..

정규식이랑 같이 쓰면 파싱하기도 쉽고 (뭐 C언에어서도 파싱라이브러리가 있긴하지만..)
조금만 미리 쓰면 쉘스크립트에서 "신비로 자동 다운로더!" 이런것도 만들수 있을거 같습니다..

해당클럽/자료실에서 자동으로 검색할 문자열이 포함된 것들을 추려서 자동으로 다운로드하게...