2014-04-12 5 views
0

그것은 그것을 할 생각 무엇하게,하지만 난 그것을 할 수있는 더 효율적인/영리한 해결책이 확신 :내 스크립트를 정리하는 방법?

#!/bin/bash 

find . -iname "*.mp4" | while read f 
do 

    id=$(echo $f | sed -n 's/.*.S\([0-9]\+\)E\([0-9]\+\)..*/\1x\2/p' | sed 's/^0*//') 

    if [ -z "$id" ]; then 
    echo "Warning! there's no match for $f" 
    else 
     srt=(*$id*) 
     newName=$(echo $srt | sed 's/ (English).srt/.mp4/g') 
     mv "$f" "$newName" 
    fi 

done 

이 첫 번째 부분은 SRT 파일의 이름을 사용하고 MP4 이름을 바꿀 수는 파일.

for i in *" (Español (España)).srt" 
do 
    iconv -f=ISO8859-1 -t=UTF-8 "$i" > "${i%%" (Español (España)).srt"}.esp.srt" 
done 
sleep 0.5 
for i in *".srt" 
do 
    rm *" (Español (España)).srt" 
done 

코드의 상기 부분은 SRT 파일

for i in *".mp4" 
do 
    i=${i%.mp4} 
    mkvmerge -o "$i.mkv" \ 
    "--language" "1:eng" \ 
    "-a" "1" "-d" "0" "-S" "-T" "$i.mp4" \ 
    "--language" "0:eng" \ 
    "-s" "0" "-D" "-A" "-T" "$i (English).srt" \ 
    "--language" "0:spa" \ 
    "-s" "0" "-D" "-A" "-T" "$i.esp.srt" \ 
    "--track-order" "0:0,0:1,1:0,2:0" 
done 

find . -type f ! -name "*.mkv" ! -name "*.sh" -delete 

for files in *.mkv 
do 
mv "$files" "${files%.mkv}.mp4" 
done 

notify-send -t 2000 "Fin de la conversión" 

후자

부분의 인코딩을 변경 SRT 파일을 MP4 파일을 병합.

+0

이미 최소한으로 깨끗하게 보인다. 어쩌면 각 명령의 끝에'&&'를 추가하여 오류를보다 잘 처리 할 수 ​​있습니다. 또한 if 문을 재미있게 만들기 위해 bash 스타일을 쓸 수도 있습니다 (예 :'[[-z "$ id"]] && echo "경고"&& continue') – naab

+0

[CodeReview] (http : // codereview.stackexchange.com/)보다 – BroSlow

답변

0

나는 그것을 바꿀 많은 것을하지 않았다. 중요한 것은 내가 mkvmerge 전화를 정리했다. 너무 많은 따옴표가 매우 엉망으로 보인다.

#!/bin/bash 

find . -iname "*.mp4" | 
while IFS= read -r f; do 
    id=$(sed -n 's/.*.S\([0-9]\+\)E\([0-9]\+\)..*/\1x\2/p' <<< "$f" | sed 's/^0\+//') 

    if [ -z "$id" ]; then 
     echo "Warning! there's no match for $f" 
    else 
     for srt in *"$id"*; do 
      newName=$(sed 's/ (English).srt/.mp4/g' <<< "$srt") 
      mv "$f" "$newName" 
     done 
    fi 
done 

for i in *" (Español (España)).srt"; do 
    iconv -f=ISO8859-1 -t=UTF-8 "$i" > "${i%%" (Español (España)).srt"}.esp.srt" && 
    rm "$i" 
done 
#sleep 0.5 

for i in *".mp4"; do 
    i=${i%.mp4} 
    mkvmerge -o "$i.mkv" \ 
     --language 1:eng -a 1 -d 0 -S -T "$i.mp4" \ 
     --language 0:eng -s 0 -D -A -T "$i (English).srt" \ 
     --language 0:spa -s 0 -D -A -T "$i.esp.srt" \ 
     --track-order 0:0,0:1,1:0,2:0 
done 

find . -type f ! -name "*.mkv" ! -name "*.sh" -delete 

for f in *.mkv; do 
    mv "$f" "${f%.mkv}.mp4" 
done 

notify-send -t 2000 "Fin de la conversión" 
관련 문제