#!/bin/bash echo -e "$1\n$2\n$3" >> /specshare/sample.txt
sudo chmod +x testhook.sh
sudo service deluged restart
1759d534dbe371565632ec0cccbb1579d344c5ca
Totally.Legal.Open.Source.Software.iso
/ store / distribs
#!/bin/bash torrentname=$2; torrentpath=$(readlink -f "$3"); fullpath="$torrentpath/$torrentname"; echo "============================" >> /specshare/log.txt; echo "$(date +"%D %T"): $1 $2 $3" >> /specshare/log.txt; echo "$(date +"%D %T"): $fullpath" >> /specshare/log.txt; if [[ "$fullpath" != /store/films/* ]]; then echo "$(date +"%D %T"): Invalid path" >> /specshare/log.txt; exit 0; fi; echo "$(date +"%D %T"): path ok" >> /specshare/log.txt; mkvlist=$(find "$fullpath" -type f | grep .mkv); while read -r fname; do /specshare/extractor.sh "$fname" "eng,rus,unk"; done <<< "$mkvlist";
sudo apt-get install mkvtoolnix
mkvmerge -I <filename>
Track ID 1: video (V_MPEG4 / ISO / AVC) [language: eng track_name: The \ sMatrix \ s1999 \ s1080p \ sBluRay \ sDD5.1 ββ\ sx264-CtrlHD display_dimensions: 1280x532 default_track: 0 forced_track: 0 packetizer: mpeg4_p10_video default_duration: 41708332 ]
Track ID 2: audio (A_AC3) [language: rus track_name: DUB-Blu-ray default_track: 1 forced_track: 0 default_duration: 32000000 audio_sampling_frequency: 48000 audio_channels: 6]
<many uninteresting audio tracks ...>
Track ID 9: audio (A_DTS) [language: eng track_name: Original default_track: 0 forced_track: 0 default_duration: 10666666 audio_sampling_frequency: 48000 audio_channels: 6]
Track ID 10: subtitles (S_TEXT / UTF8) [language: rus track_name: Sub default_track: 0 forced_track: 0]
Track ID 11: subtitles (S_TEXT / UTF8) [language: rus track_name: Sub- (by \ s \ 2 correct \ 2 \ stranslation \ sGoblin) default_track: 0 forced_track: 0]
Track ID 12: subtitles (S_TEXT / UTF8) [language: eng track_name: Sub default_track: 0 forced_track: 0]
Track ID 13: subtitles (S_TEXT / UTF8) [language: eng track_name: Sub-SDH default_track: 0 forced_track: 0]
mkvextract tracks <filename> <trackId>:<subname>
..srt,
. , . , - , , ( ). : , - . , , .
extractor.sh :
#!/bin/bash if [[ "$1" != *.mkv ]]; then exit 0; fi; FORMAT_FULL=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\).*language:([[:alpha:]]+)"; FORMAT_SHORT=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\)"; baseName=${1%.mkv}; requiredLangs=$(echo "$2" | tr "," "\n"); echo "$(date +"%D %T"): $baseName" >> /specshare/log.txt; counter=0; tracks=$(mkvmerge -I "$1"); while read -r track; do echo -e "$(date +"%D %T"): $track" >> /specshare/log.txt; if [[ $track =~ $FORMAT_FULL ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; lang=${BASH_REMATCH[4]}; codec=${BASH_REMATCH[3]}; else if [[ $track =~ $FORMAT_SHORT ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; codec=${BASH_REMATCH[3]}; lang="unk"; else id=-1; fi fi; langMatch=false; idMatch=false; typeMatch=false; codecMatch=false; shouldExtract=false; for reqLang in $requiredLangs; do [ "$reqLang" == "$lang" ] && langMatch=true; done [ "$tType" == "subtitles" ] && typeMatch=true; [ "$codec" == "S_TEXT/UTF8" ] && codecMatch=true; [ $id -ne -1 ] && idMatch=true; $langMatch && $idMatch && $typeMatch && $codecMatch && shouldExtract=true; if $shouldExtract ; then subName="$baseName.$lang.srt" if [ -f "$subName" -o "$lang" == "unk" ]; then subName="$baseName.$lang$counter.srt"; (( counter++ )); fi mkvextract tracks "$1" $id:"$subName"; fi done <<< "$tracks"
: , , //, . , capturing groups POSIX- , , , . , .
, . - Plex.
Plex Media Server Plex Media Scanner
, /usr/lib/plexmediaserver/
, . , :
; - , - PMS;
, . 2 sudoers
- sudo. , LD_LIBRARY_PATH
( 1) Deluge, , .
, , , ...
GET-
- PMS, UI , GET- URL . URL :
http://<serverIP>:32400/library/sections/<sectionId>/refresh
sectionId
- PMS. , -
- 3.
, , deluge-movie-callback.sh -
wget -qO - http://192.168.13.1:32400/library/sections/3/refresh >> /dev/null ;
URL ?deep=1
?force=1
.
, deluge-movie-callback.sh Execute. , .
.
. , , , - , . - , . , . Deluge , , . Label. , , , , deluged , . , c sudo su - .
..srt,
. , . , - , , ( ). : , - . , , .
extractor.sh :
#!/bin/bash if [[ "$1" != *.mkv ]]; then exit 0; fi; FORMAT_FULL=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\).*language:([[:alpha:]]+)"; FORMAT_SHORT=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\)"; baseName=${1%.mkv}; requiredLangs=$(echo "$2" | tr "," "\n"); echo "$(date +"%D %T"): $baseName" >> /specshare/log.txt; counter=0; tracks=$(mkvmerge -I "$1"); while read -r track; do echo -e "$(date +"%D %T"): $track" >> /specshare/log.txt; if [[ $track =~ $FORMAT_FULL ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; lang=${BASH_REMATCH[4]}; codec=${BASH_REMATCH[3]}; else if [[ $track =~ $FORMAT_SHORT ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; codec=${BASH_REMATCH[3]}; lang="unk"; else id=-1; fi fi; langMatch=false; idMatch=false; typeMatch=false; codecMatch=false; shouldExtract=false; for reqLang in $requiredLangs; do [ "$reqLang" == "$lang" ] && langMatch=true; done [ "$tType" == "subtitles" ] && typeMatch=true; [ "$codec" == "S_TEXT/UTF8" ] && codecMatch=true; [ $id -ne -1 ] && idMatch=true; $langMatch && $idMatch && $typeMatch && $codecMatch && shouldExtract=true; if $shouldExtract ; then subName="$baseName.$lang.srt" if [ -f "$subName" -o "$lang" == "unk" ]; then subName="$baseName.$lang$counter.srt"; (( counter++ )); fi mkvextract tracks "$1" $id:"$subName"; fi done <<< "$tracks"
: , , //, . , capturing groups POSIX- , , , . , .
, . - Plex.
Plex Media Server Plex Media Scanner
, /usr/lib/plexmediaserver/
, . , :
; - , - PMS;
, . 2 sudoers
- sudo. , LD_LIBRARY_PATH
( 1) Deluge, , .
, , , ...
GET-
- PMS, UI , GET- URL . URL :
http://<serverIP>:32400/library/sections/<sectionId>/refresh
sectionId
- PMS. , -

- 3.
, , deluge-movie-callback.sh -
wget -qO - http://192.168.13.1:32400/library/sections/3/refresh >> /dev/null ;
URL ?deep=1
?force=1
.
, deluge-movie-callback.sh Execute. , .
.
. , , , - , . - , . , . Deluge , , . Label. , , , , deluged , . , c sudo su - .
..srt,
. , . , - , , ( ). : , - . , , .
extractor.sh :
#!/bin/bash if [[ "$1" != *.mkv ]]; then exit 0; fi; FORMAT_FULL=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\).*language:([[:alpha:]]+)"; FORMAT_SHORT=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\)"; baseName=${1%.mkv}; requiredLangs=$(echo "$2" | tr "," "\n"); echo "$(date +"%D %T"): $baseName" >> /specshare/log.txt; counter=0; tracks=$(mkvmerge -I "$1"); while read -r track; do echo -e "$(date +"%D %T"): $track" >> /specshare/log.txt; if [[ $track =~ $FORMAT_FULL ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; lang=${BASH_REMATCH[4]}; codec=${BASH_REMATCH[3]}; else if [[ $track =~ $FORMAT_SHORT ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; codec=${BASH_REMATCH[3]}; lang="unk"; else id=-1; fi fi; langMatch=false; idMatch=false; typeMatch=false; codecMatch=false; shouldExtract=false; for reqLang in $requiredLangs; do [ "$reqLang" == "$lang" ] && langMatch=true; done [ "$tType" == "subtitles" ] && typeMatch=true; [ "$codec" == "S_TEXT/UTF8" ] && codecMatch=true; [ $id -ne -1 ] && idMatch=true; $langMatch && $idMatch && $typeMatch && $codecMatch && shouldExtract=true; if $shouldExtract ; then subName="$baseName.$lang.srt" if [ -f "$subName" -o "$lang" == "unk" ]; then subName="$baseName.$lang$counter.srt"; (( counter++ )); fi mkvextract tracks "$1" $id:"$subName"; fi done <<< "$tracks"
: , , //, . , capturing groups POSIX- , , , . , .
, . - Plex.
Plex Media Server Plex Media Scanner
, /usr/lib/plexmediaserver/
, . , :
; - , - PMS;
, . 2 sudoers
- sudo. , LD_LIBRARY_PATH
( 1) Deluge, , .
, , , ...
GET-
- PMS, UI , GET- URL . URL :
http://<serverIP>:32400/library/sections/<sectionId>/refresh
sectionId
- PMS. , -

- 3.
, , deluge-movie-callback.sh -
wget -qO - http://192.168.13.1:32400/library/sections/3/refresh >> /dev/null ;
URL ?deep=1
?force=1
.
, deluge-movie-callback.sh Execute. , .
.
. , , , - , . - , . , . Deluge , , . Label. , , , , deluged , . , c sudo su - .
..srt,
. , . , - , , ( ). : , - . , , .
extractor.sh :
#!/bin/bash if [[ "$1" != *.mkv ]]; then exit 0; fi; FORMAT_FULL=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\).*language:([[:alpha:]]+)"; FORMAT_SHORT=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\)"; baseName=${1%.mkv}; requiredLangs=$(echo "$2" | tr "," "\n"); echo "$(date +"%D %T"): $baseName" >> /specshare/log.txt; counter=0; tracks=$(mkvmerge -I "$1"); while read -r track; do echo -e "$(date +"%D %T"): $track" >> /specshare/log.txt; if [[ $track =~ $FORMAT_FULL ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; lang=${BASH_REMATCH[4]}; codec=${BASH_REMATCH[3]}; else if [[ $track =~ $FORMAT_SHORT ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; codec=${BASH_REMATCH[3]}; lang="unk"; else id=-1; fi fi; langMatch=false; idMatch=false; typeMatch=false; codecMatch=false; shouldExtract=false; for reqLang in $requiredLangs; do [ "$reqLang" == "$lang" ] && langMatch=true; done [ "$tType" == "subtitles" ] && typeMatch=true; [ "$codec" == "S_TEXT/UTF8" ] && codecMatch=true; [ $id -ne -1 ] && idMatch=true; $langMatch && $idMatch && $typeMatch && $codecMatch && shouldExtract=true; if $shouldExtract ; then subName="$baseName.$lang.srt" if [ -f "$subName" -o "$lang" == "unk" ]; then subName="$baseName.$lang$counter.srt"; (( counter++ )); fi mkvextract tracks "$1" $id:"$subName"; fi done <<< "$tracks"
: , , //, . , capturing groups POSIX- , , , . , .
, . - Plex.
Plex Media Server Plex Media Scanner
, /usr/lib/plexmediaserver/
, . , :
; - , - PMS;
, . 2 sudoers
- sudo. , LD_LIBRARY_PATH
( 1) Deluge, , .
, , , ...
GET-
- PMS, UI , GET- URL . URL :
http://<serverIP>:32400/library/sections/<sectionId>/refresh
sectionId
- PMS. , -

- 3.
, , deluge-movie-callback.sh -
wget -qO - http://192.168.13.1:32400/library/sections/3/refresh >> /dev/null ;
URL ?deep=1
?force=1
.
, deluge-movie-callback.sh Execute. , .
.
. , , , - , . - , . , . Deluge , , . Label. , , , , deluged , . , c sudo su - .
..srt,
. , . , - , , ( ). : , - . , , .
extractor.sh :
#!/bin/bash if [[ "$1" != *.mkv ]]; then exit 0; fi; FORMAT_FULL=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\).*language:([[:alpha:]]+)"; FORMAT_SHORT=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\)"; baseName=${1%.mkv}; requiredLangs=$(echo "$2" | tr "," "\n"); echo "$(date +"%D %T"): $baseName" >> /specshare/log.txt; counter=0; tracks=$(mkvmerge -I "$1"); while read -r track; do echo -e "$(date +"%D %T"): $track" >> /specshare/log.txt; if [[ $track =~ $FORMAT_FULL ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; lang=${BASH_REMATCH[4]}; codec=${BASH_REMATCH[3]}; else if [[ $track =~ $FORMAT_SHORT ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; codec=${BASH_REMATCH[3]}; lang="unk"; else id=-1; fi fi; langMatch=false; idMatch=false; typeMatch=false; codecMatch=false; shouldExtract=false; for reqLang in $requiredLangs; do [ "$reqLang" == "$lang" ] && langMatch=true; done [ "$tType" == "subtitles" ] && typeMatch=true; [ "$codec" == "S_TEXT/UTF8" ] && codecMatch=true; [ $id -ne -1 ] && idMatch=true; $langMatch && $idMatch && $typeMatch && $codecMatch && shouldExtract=true; if $shouldExtract ; then subName="$baseName.$lang.srt" if [ -f "$subName" -o "$lang" == "unk" ]; then subName="$baseName.$lang$counter.srt"; (( counter++ )); fi mkvextract tracks "$1" $id:"$subName"; fi done <<< "$tracks"
: , , //, . , capturing groups POSIX- , , , . , .
, . - Plex.
Plex Media Server Plex Media Scanner
, /usr/lib/plexmediaserver/
, . , :
; - , - PMS;
, . 2 sudoers
- sudo. , LD_LIBRARY_PATH
( 1) Deluge, , .
, , , ...
GET-
- PMS, UI , GET- URL . URL :
http://<serverIP>:32400/library/sections/<sectionId>/refresh
sectionId
- PMS. , -

- 3.
, , deluge-movie-callback.sh -
wget -qO - http://192.168.13.1:32400/library/sections/3/refresh >> /dev/null ;
URL ?deep=1
?force=1
.
, deluge-movie-callback.sh Execute. , .
.
. , , , - , . - , . , . Deluge , , . Label. , , , , deluged , . , c sudo su - .
..srt,
. , . , - , , ( ). : , - . , , .
extractor.sh :
#!/bin/bash if [[ "$1" != *.mkv ]]; then exit 0; fi; FORMAT_FULL=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\).*language:([[:alpha:]]+)"; FORMAT_SHORT=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\)"; baseName=${1%.mkv}; requiredLangs=$(echo "$2" | tr "," "\n"); echo "$(date +"%D %T"): $baseName" >> /specshare/log.txt; counter=0; tracks=$(mkvmerge -I "$1"); while read -r track; do echo -e "$(date +"%D %T"): $track" >> /specshare/log.txt; if [[ $track =~ $FORMAT_FULL ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; lang=${BASH_REMATCH[4]}; codec=${BASH_REMATCH[3]}; else if [[ $track =~ $FORMAT_SHORT ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; codec=${BASH_REMATCH[3]}; lang="unk"; else id=-1; fi fi; langMatch=false; idMatch=false; typeMatch=false; codecMatch=false; shouldExtract=false; for reqLang in $requiredLangs; do [ "$reqLang" == "$lang" ] && langMatch=true; done [ "$tType" == "subtitles" ] && typeMatch=true; [ "$codec" == "S_TEXT/UTF8" ] && codecMatch=true; [ $id -ne -1 ] && idMatch=true; $langMatch && $idMatch && $typeMatch && $codecMatch && shouldExtract=true; if $shouldExtract ; then subName="$baseName.$lang.srt" if [ -f "$subName" -o "$lang" == "unk" ]; then subName="$baseName.$lang$counter.srt"; (( counter++ )); fi mkvextract tracks "$1" $id:"$subName"; fi done <<< "$tracks"
: , , //, . , capturing groups POSIX- , , , . , .
, . - Plex.
Plex Media Server Plex Media Scanner
, /usr/lib/plexmediaserver/
, . , :
; - , - PMS;
, . 2 sudoers
- sudo. , LD_LIBRARY_PATH
( 1) Deluge, , .
, , , ...
GET-
- PMS, UI , GET- URL . URL :
http://<serverIP>:32400/library/sections/<sectionId>/refresh
sectionId
- PMS. , -

- 3.
, , deluge-movie-callback.sh -
wget -qO - http://192.168.13.1:32400/library/sections/3/refresh >> /dev/null ;
URL ?deep=1
?force=1
.
, deluge-movie-callback.sh Execute. , .
.
. , , , - , . - , . , . Deluge , , . Label. , , , , deluged , . , c sudo su - .
..srt,
. , . , - , , ( ). : , - . , , .
extractor.sh :
#!/bin/bash if [[ "$1" != *.mkv ]]; then exit 0; fi; FORMAT_FULL=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\).*language:([[:alpha:]]+)"; FORMAT_SHORT=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\)"; baseName=${1%.mkv}; requiredLangs=$(echo "$2" | tr "," "\n"); echo "$(date +"%D %T"): $baseName" >> /specshare/log.txt; counter=0; tracks=$(mkvmerge -I "$1"); while read -r track; do echo -e "$(date +"%D %T"): $track" >> /specshare/log.txt; if [[ $track =~ $FORMAT_FULL ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; lang=${BASH_REMATCH[4]}; codec=${BASH_REMATCH[3]}; else if [[ $track =~ $FORMAT_SHORT ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; codec=${BASH_REMATCH[3]}; lang="unk"; else id=-1; fi fi; langMatch=false; idMatch=false; typeMatch=false; codecMatch=false; shouldExtract=false; for reqLang in $requiredLangs; do [ "$reqLang" == "$lang" ] && langMatch=true; done [ "$tType" == "subtitles" ] && typeMatch=true; [ "$codec" == "S_TEXT/UTF8" ] && codecMatch=true; [ $id -ne -1 ] && idMatch=true; $langMatch && $idMatch && $typeMatch && $codecMatch && shouldExtract=true; if $shouldExtract ; then subName="$baseName.$lang.srt" if [ -f "$subName" -o "$lang" == "unk" ]; then subName="$baseName.$lang$counter.srt"; (( counter++ )); fi mkvextract tracks "$1" $id:"$subName"; fi done <<< "$tracks"
: , , //, . , capturing groups POSIX- , , , . , .
, . - Plex.
Plex Media Server Plex Media Scanner
, /usr/lib/plexmediaserver/
, . , :
; - , - PMS;
, . 2 sudoers
- sudo. , LD_LIBRARY_PATH
( 1) Deluge, , .
, , , ...
GET-
- PMS, UI , GET- URL . URL :
http://<serverIP>:32400/library/sections/<sectionId>/refresh
sectionId
- PMS. , -

- 3.
, , deluge-movie-callback.sh -
wget -qO - http://192.168.13.1:32400/library/sections/3/refresh >> /dev/null ;
URL ?deep=1
?force=1
.
, deluge-movie-callback.sh Execute. , .
.
. , , , - , . - , . , . Deluge , , . Label. , , , , deluged , . , c sudo su - .
..srt,
. , . , - , , ( ). : , - . , , .
extractor.sh :
#!/bin/bash if [[ "$1" != *.mkv ]]; then exit 0; fi; FORMAT_FULL=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\).*language:([[:alpha:]]+)"; FORMAT_SHORT=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\)"; baseName=${1%.mkv}; requiredLangs=$(echo "$2" | tr "," "\n"); echo "$(date +"%D %T"): $baseName" >> /specshare/log.txt; counter=0; tracks=$(mkvmerge -I "$1"); while read -r track; do echo -e "$(date +"%D %T"): $track" >> /specshare/log.txt; if [[ $track =~ $FORMAT_FULL ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; lang=${BASH_REMATCH[4]}; codec=${BASH_REMATCH[3]}; else if [[ $track =~ $FORMAT_SHORT ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; codec=${BASH_REMATCH[3]}; lang="unk"; else id=-1; fi fi; langMatch=false; idMatch=false; typeMatch=false; codecMatch=false; shouldExtract=false; for reqLang in $requiredLangs; do [ "$reqLang" == "$lang" ] && langMatch=true; done [ "$tType" == "subtitles" ] && typeMatch=true; [ "$codec" == "S_TEXT/UTF8" ] && codecMatch=true; [ $id -ne -1 ] && idMatch=true; $langMatch && $idMatch && $typeMatch && $codecMatch && shouldExtract=true; if $shouldExtract ; then subName="$baseName.$lang.srt" if [ -f "$subName" -o "$lang" == "unk" ]; then subName="$baseName.$lang$counter.srt"; (( counter++ )); fi mkvextract tracks "$1" $id:"$subName"; fi done <<< "$tracks"
: , , //, . , capturing groups POSIX- , , , . , .
, . - Plex.
Plex Media Server Plex Media Scanner
, /usr/lib/plexmediaserver/
, . , :
; - , - PMS;
, . 2 sudoers
- sudo. , LD_LIBRARY_PATH
( 1) Deluge, , .
, , , ...
GET-
- PMS, UI , GET- URL . URL :
http://<serverIP>:32400/library/sections/<sectionId>/refresh
sectionId
- PMS. , -

- 3.
, , deluge-movie-callback.sh -
wget -qO - http://192.168.13.1:32400/library/sections/3/refresh >> /dev/null ;
URL ?deep=1
?force=1
.
, deluge-movie-callback.sh Execute. , .
.
. , , , - , . - , . , . Deluge , , . Label. , , , , deluged , . , c sudo su - .
..srt,
. , . , - , , ( ). : , - . , , .
extractor.sh :
#!/bin/bash if [[ "$1" != *.mkv ]]; then exit 0; fi; FORMAT_FULL=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\).*language:([[:alpha:]]+)"; FORMAT_SHORT=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\)"; baseName=${1%.mkv}; requiredLangs=$(echo "$2" | tr "," "\n"); echo "$(date +"%D %T"): $baseName" >> /specshare/log.txt; counter=0; tracks=$(mkvmerge -I "$1"); while read -r track; do echo -e "$(date +"%D %T"): $track" >> /specshare/log.txt; if [[ $track =~ $FORMAT_FULL ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; lang=${BASH_REMATCH[4]}; codec=${BASH_REMATCH[3]}; else if [[ $track =~ $FORMAT_SHORT ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; codec=${BASH_REMATCH[3]}; lang="unk"; else id=-1; fi fi; langMatch=false; idMatch=false; typeMatch=false; codecMatch=false; shouldExtract=false; for reqLang in $requiredLangs; do [ "$reqLang" == "$lang" ] && langMatch=true; done [ "$tType" == "subtitles" ] && typeMatch=true; [ "$codec" == "S_TEXT/UTF8" ] && codecMatch=true; [ $id -ne -1 ] && idMatch=true; $langMatch && $idMatch && $typeMatch && $codecMatch && shouldExtract=true; if $shouldExtract ; then subName="$baseName.$lang.srt" if [ -f "$subName" -o "$lang" == "unk" ]; then subName="$baseName.$lang$counter.srt"; (( counter++ )); fi mkvextract tracks "$1" $id:"$subName"; fi done <<< "$tracks"
: , , //, . , capturing groups POSIX- , , , . , .
, . - Plex.
Plex Media Server Plex Media Scanner
, /usr/lib/plexmediaserver/
, . , :
; - , - PMS;
, . 2 sudoers
- sudo. , LD_LIBRARY_PATH
( 1) Deluge, , .
, , , ...
GET-
- PMS, UI , GET- URL . URL :
http://<serverIP>:32400/library/sections/<sectionId>/refresh
sectionId
- PMS. , -

- 3.
, , deluge-movie-callback.sh -
wget -qO - http://192.168.13.1:32400/library/sections/3/refresh >> /dev/null ;
URL ?deep=1
?force=1
.
, deluge-movie-callback.sh Execute. , .
.
. , , , - , . - , . , . Deluge , , . Label. , , , , deluged , . , c sudo su - .
..srt,
. , . , - , , ( ). : , - . , , .
extractor.sh :
#!/bin/bash if [[ "$1" != *.mkv ]]; then exit 0; fi; FORMAT_FULL=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\).*language:([[:alpha:]]+)"; FORMAT_SHORT=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\)"; baseName=${1%.mkv}; requiredLangs=$(echo "$2" | tr "," "\n"); echo "$(date +"%D %T"): $baseName" >> /specshare/log.txt; counter=0; tracks=$(mkvmerge -I "$1"); while read -r track; do echo -e "$(date +"%D %T"): $track" >> /specshare/log.txt; if [[ $track =~ $FORMAT_FULL ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; lang=${BASH_REMATCH[4]}; codec=${BASH_REMATCH[3]}; else if [[ $track =~ $FORMAT_SHORT ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; codec=${BASH_REMATCH[3]}; lang="unk"; else id=-1; fi fi; langMatch=false; idMatch=false; typeMatch=false; codecMatch=false; shouldExtract=false; for reqLang in $requiredLangs; do [ "$reqLang" == "$lang" ] && langMatch=true; done [ "$tType" == "subtitles" ] && typeMatch=true; [ "$codec" == "S_TEXT/UTF8" ] && codecMatch=true; [ $id -ne -1 ] && idMatch=true; $langMatch && $idMatch && $typeMatch && $codecMatch && shouldExtract=true; if $shouldExtract ; then subName="$baseName.$lang.srt" if [ -f "$subName" -o "$lang" == "unk" ]; then subName="$baseName.$lang$counter.srt"; (( counter++ )); fi mkvextract tracks "$1" $id:"$subName"; fi done <<< "$tracks"
: , , //, . , capturing groups POSIX- , , , . , .
, . - Plex.
Plex Media Server Plex Media Scanner
, /usr/lib/plexmediaserver/
, . , :
; - , - PMS;
, . 2 sudoers
- sudo. , LD_LIBRARY_PATH
( 1) Deluge, , .
, , , ...
GET-
- PMS, UI , GET- URL . URL :
http://<serverIP>:32400/library/sections/<sectionId>/refresh
sectionId
- PMS. , -

- 3.
, , deluge-movie-callback.sh -
wget -qO - http://192.168.13.1:32400/library/sections/3/refresh >> /dev/null ;
URL ?deep=1
?force=1
.
, deluge-movie-callback.sh Execute. , .
.
. , , , - , . - , . , . Deluge , , . Label. , , , , deluged , . , c sudo su - .
..srt,
. , . , - , , ( ). : , - . , , .
extractor.sh :
#!/bin/bash if [[ "$1" != *.mkv ]]; then exit 0; fi; FORMAT_FULL=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\).*language:([[:alpha:]]+)"; FORMAT_SHORT=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\)"; baseName=${1%.mkv}; requiredLangs=$(echo "$2" | tr "," "\n"); echo "$(date +"%D %T"): $baseName" >> /specshare/log.txt; counter=0; tracks=$(mkvmerge -I "$1"); while read -r track; do echo -e "$(date +"%D %T"): $track" >> /specshare/log.txt; if [[ $track =~ $FORMAT_FULL ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; lang=${BASH_REMATCH[4]}; codec=${BASH_REMATCH[3]}; else if [[ $track =~ $FORMAT_SHORT ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; codec=${BASH_REMATCH[3]}; lang="unk"; else id=-1; fi fi; langMatch=false; idMatch=false; typeMatch=false; codecMatch=false; shouldExtract=false; for reqLang in $requiredLangs; do [ "$reqLang" == "$lang" ] && langMatch=true; done [ "$tType" == "subtitles" ] && typeMatch=true; [ "$codec" == "S_TEXT/UTF8" ] && codecMatch=true; [ $id -ne -1 ] && idMatch=true; $langMatch && $idMatch && $typeMatch && $codecMatch && shouldExtract=true; if $shouldExtract ; then subName="$baseName.$lang.srt" if [ -f "$subName" -o "$lang" == "unk" ]; then subName="$baseName.$lang$counter.srt"; (( counter++ )); fi mkvextract tracks "$1" $id:"$subName"; fi done <<< "$tracks"
: , , //, . , capturing groups POSIX- , , , . , .
, . - Plex.
Plex Media Server Plex Media Scanner
, /usr/lib/plexmediaserver/
, . , :
; - , - PMS;
, . 2 sudoers
- sudo. , LD_LIBRARY_PATH
( 1) Deluge, , .
, , , ...
GET-
- PMS, UI , GET- URL . URL :
http://<serverIP>:32400/library/sections/<sectionId>/refresh
sectionId
- PMS. , -

- 3.
, , deluge-movie-callback.sh -
wget -qO - http://192.168.13.1:32400/library/sections/3/refresh >> /dev/null ;
URL ?deep=1
?force=1
.
, deluge-movie-callback.sh Execute. , .
.
. , , , - , . - , . , . Deluge , , . Label. , , , , deluged , . , c sudo su - .
..srt,
. , . , - , , ( ). : , - . , , .
extractor.sh :
#!/bin/bash if [[ "$1" != *.mkv ]]; then exit 0; fi; FORMAT_FULL=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\).*language:([[:alpha:]]+)"; FORMAT_SHORT=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\)"; baseName=${1%.mkv}; requiredLangs=$(echo "$2" | tr "," "\n"); echo "$(date +"%D %T"): $baseName" >> /specshare/log.txt; counter=0; tracks=$(mkvmerge -I "$1"); while read -r track; do echo -e "$(date +"%D %T"): $track" >> /specshare/log.txt; if [[ $track =~ $FORMAT_FULL ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; lang=${BASH_REMATCH[4]}; codec=${BASH_REMATCH[3]}; else if [[ $track =~ $FORMAT_SHORT ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; codec=${BASH_REMATCH[3]}; lang="unk"; else id=-1; fi fi; langMatch=false; idMatch=false; typeMatch=false; codecMatch=false; shouldExtract=false; for reqLang in $requiredLangs; do [ "$reqLang" == "$lang" ] && langMatch=true; done [ "$tType" == "subtitles" ] && typeMatch=true; [ "$codec" == "S_TEXT/UTF8" ] && codecMatch=true; [ $id -ne -1 ] && idMatch=true; $langMatch && $idMatch && $typeMatch && $codecMatch && shouldExtract=true; if $shouldExtract ; then subName="$baseName.$lang.srt" if [ -f "$subName" -o "$lang" == "unk" ]; then subName="$baseName.$lang$counter.srt"; (( counter++ )); fi mkvextract tracks "$1" $id:"$subName"; fi done <<< "$tracks"
: , , //, . , capturing groups POSIX- , , , . , .
, . - Plex.
Plex Media Server Plex Media Scanner
, /usr/lib/plexmediaserver/
, . , :
; - , - PMS;
, . 2 sudoers
- sudo. , LD_LIBRARY_PATH
( 1) Deluge, , .
, , , ...
GET-
- PMS, UI , GET- URL . URL :
http://<serverIP>:32400/library/sections/<sectionId>/refresh
sectionId
- PMS. , -
- 3.
, , deluge-movie-callback.sh -
wget -qO - http://192.168.13.1:32400/library/sections/3/refresh >> /dev/null ;
URL ?deep=1
?force=1
.
, deluge-movie-callback.sh Execute. , .
.
. , , , - , . - , . , . Deluge , , . Label. , , , , deluged , . , c sudo su - .
..srt,
. , . , - , , ( ). : , - . , , .
extractor.sh :
#!/bin/bash if [[ "$1" != *.mkv ]]; then exit 0; fi; FORMAT_FULL=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\).*language:([[:alpha:]]+)"; FORMAT_SHORT=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\)"; baseName=${1%.mkv}; requiredLangs=$(echo "$2" | tr "," "\n"); echo "$(date +"%D %T"): $baseName" >> /specshare/log.txt; counter=0; tracks=$(mkvmerge -I "$1"); while read -r track; do echo -e "$(date +"%D %T"): $track" >> /specshare/log.txt; if [[ $track =~ $FORMAT_FULL ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; lang=${BASH_REMATCH[4]}; codec=${BASH_REMATCH[3]}; else if [[ $track =~ $FORMAT_SHORT ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; codec=${BASH_REMATCH[3]}; lang="unk"; else id=-1; fi fi; langMatch=false; idMatch=false; typeMatch=false; codecMatch=false; shouldExtract=false; for reqLang in $requiredLangs; do [ "$reqLang" == "$lang" ] && langMatch=true; done [ "$tType" == "subtitles" ] && typeMatch=true; [ "$codec" == "S_TEXT/UTF8" ] && codecMatch=true; [ $id -ne -1 ] && idMatch=true; $langMatch && $idMatch && $typeMatch && $codecMatch && shouldExtract=true; if $shouldExtract ; then subName="$baseName.$lang.srt" if [ -f "$subName" -o "$lang" == "unk" ]; then subName="$baseName.$lang$counter.srt"; (( counter++ )); fi mkvextract tracks "$1" $id:"$subName"; fi done <<< "$tracks"
: , , //, . , capturing groups POSIX- , , , . , .
, . - Plex.
Plex Media Server Plex Media Scanner
, /usr/lib/plexmediaserver/
, . , :
; - , - PMS;
, . 2 sudoers
- sudo. , LD_LIBRARY_PATH
( 1) Deluge, , .
, , , ...
GET-
- PMS, UI , GET- URL . URL :
http://<serverIP>:32400/library/sections/<sectionId>/refresh
sectionId
- PMS. , -

- 3.
, , deluge-movie-callback.sh -
wget -qO - http://192.168.13.1:32400/library/sections/3/refresh >> /dev/null ;
URL ?deep=1
?force=1
.
, deluge-movie-callback.sh Execute. , .
.
. , , , - , . - , . , . Deluge , , . Label. , , , , deluged , . , c sudo su - .
..srt,
. , . , - , , ( ). : , - . , , .
extractor.sh :
#!/bin/bash if [[ "$1" != *.mkv ]]; then exit 0; fi; FORMAT_FULL=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\).*language:([[:alpha:]]+)"; FORMAT_SHORT=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\)"; baseName=${1%.mkv}; requiredLangs=$(echo "$2" | tr "," "\n"); echo "$(date +"%D %T"): $baseName" >> /specshare/log.txt; counter=0; tracks=$(mkvmerge -I "$1"); while read -r track; do echo -e "$(date +"%D %T"): $track" >> /specshare/log.txt; if [[ $track =~ $FORMAT_FULL ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; lang=${BASH_REMATCH[4]}; codec=${BASH_REMATCH[3]}; else if [[ $track =~ $FORMAT_SHORT ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; codec=${BASH_REMATCH[3]}; lang="unk"; else id=-1; fi fi; langMatch=false; idMatch=false; typeMatch=false; codecMatch=false; shouldExtract=false; for reqLang in $requiredLangs; do [ "$reqLang" == "$lang" ] && langMatch=true; done [ "$tType" == "subtitles" ] && typeMatch=true; [ "$codec" == "S_TEXT/UTF8" ] && codecMatch=true; [ $id -ne -1 ] && idMatch=true; $langMatch && $idMatch && $typeMatch && $codecMatch && shouldExtract=true; if $shouldExtract ; then subName="$baseName.$lang.srt" if [ -f "$subName" -o "$lang" == "unk" ]; then subName="$baseName.$lang$counter.srt"; (( counter++ )); fi mkvextract tracks "$1" $id:"$subName"; fi done <<< "$tracks"
: , , //, . , capturing groups POSIX- , , , . , .
, . - Plex.
Plex Media Server Plex Media Scanner
, /usr/lib/plexmediaserver/
, . , :
; - , - PMS;
, . 2 sudoers
- sudo. , LD_LIBRARY_PATH
( 1) Deluge, , .
, , , ...
GET-
- PMS, UI , GET- URL . URL :
http://<serverIP>:32400/library/sections/<sectionId>/refresh
sectionId
- PMS. , -
- 3.
, , deluge-movie-callback.sh -
wget -qO - http://192.168.13.1:32400/library/sections/3/refresh >> /dev/null ;
URL ?deep=1
?force=1
.
, deluge-movie-callback.sh Execute. , .
.
. , , , - , . - , . , . Deluge , , . Label. , , , , deluged , . , c sudo su - .
..srt,
. , . , - , , ( ). : , - . , , .
extractor.sh :
#!/bin/bash if [[ "$1" != *.mkv ]]; then exit 0; fi; FORMAT_FULL=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\).*language:([[:alpha:]]+)"; FORMAT_SHORT=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\)"; baseName=${1%.mkv}; requiredLangs=$(echo "$2" | tr "," "\n"); echo "$(date +"%D %T"): $baseName" >> /specshare/log.txt; counter=0; tracks=$(mkvmerge -I "$1"); while read -r track; do echo -e "$(date +"%D %T"): $track" >> /specshare/log.txt; if [[ $track =~ $FORMAT_FULL ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; lang=${BASH_REMATCH[4]}; codec=${BASH_REMATCH[3]}; else if [[ $track =~ $FORMAT_SHORT ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; codec=${BASH_REMATCH[3]}; lang="unk"; else id=-1; fi fi; langMatch=false; idMatch=false; typeMatch=false; codecMatch=false; shouldExtract=false; for reqLang in $requiredLangs; do [ "$reqLang" == "$lang" ] && langMatch=true; done [ "$tType" == "subtitles" ] && typeMatch=true; [ "$codec" == "S_TEXT/UTF8" ] && codecMatch=true; [ $id -ne -1 ] && idMatch=true; $langMatch && $idMatch && $typeMatch && $codecMatch && shouldExtract=true; if $shouldExtract ; then subName="$baseName.$lang.srt" if [ -f "$subName" -o "$lang" == "unk" ]; then subName="$baseName.$lang$counter.srt"; (( counter++ )); fi mkvextract tracks "$1" $id:"$subName"; fi done <<< "$tracks"
: , , //, . , capturing groups POSIX- , , , . , .
, . - Plex.
Plex Media Server Plex Media Scanner
, /usr/lib/plexmediaserver/
, . , :
; - , - PMS;
, . 2 sudoers
- sudo. , LD_LIBRARY_PATH
( 1) Deluge, , .
, , , ...
GET-
- PMS, UI , GET- URL . URL :
http://<serverIP>:32400/library/sections/<sectionId>/refresh
sectionId
- PMS. , -

- 3.
, , deluge-movie-callback.sh -
wget -qO - http://192.168.13.1:32400/library/sections/3/refresh >> /dev/null ;
URL ?deep=1
?force=1
.
, deluge-movie-callback.sh Execute. , .
.
. , , , - , . - , . , . Deluge , , . Label. , , , , deluged , . , c sudo su - .
..srt,
. , . , - , , ( ). : , - . , , .
extractor.sh :
#!/bin/bash if [[ "$1" != *.mkv ]]; then exit 0; fi; FORMAT_FULL=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\).*language:([[:alpha:]]+)"; FORMAT_SHORT=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\)"; baseName=${1%.mkv}; requiredLangs=$(echo "$2" | tr "," "\n"); echo "$(date +"%D %T"): $baseName" >> /specshare/log.txt; counter=0; tracks=$(mkvmerge -I "$1"); while read -r track; do echo -e "$(date +"%D %T"): $track" >> /specshare/log.txt; if [[ $track =~ $FORMAT_FULL ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; lang=${BASH_REMATCH[4]}; codec=${BASH_REMATCH[3]}; else if [[ $track =~ $FORMAT_SHORT ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; codec=${BASH_REMATCH[3]}; lang="unk"; else id=-1; fi fi; langMatch=false; idMatch=false; typeMatch=false; codecMatch=false; shouldExtract=false; for reqLang in $requiredLangs; do [ "$reqLang" == "$lang" ] && langMatch=true; done [ "$tType" == "subtitles" ] && typeMatch=true; [ "$codec" == "S_TEXT/UTF8" ] && codecMatch=true; [ $id -ne -1 ] && idMatch=true; $langMatch && $idMatch && $typeMatch && $codecMatch && shouldExtract=true; if $shouldExtract ; then subName="$baseName.$lang.srt" if [ -f "$subName" -o "$lang" == "unk" ]; then subName="$baseName.$lang$counter.srt"; (( counter++ )); fi mkvextract tracks "$1" $id:"$subName"; fi done <<< "$tracks"
: , , //, . , capturing groups POSIX- , , , . , .
, . - Plex.
Plex Media Server Plex Media Scanner
, /usr/lib/plexmediaserver/
, . , :
; - , - PMS;
, . 2 sudoers
- sudo. , LD_LIBRARY_PATH
( 1) Deluge, , .
, , , ...
GET-
- PMS, UI , GET- URL . URL :
http://<serverIP>:32400/library/sections/<sectionId>/refresh
sectionId
- PMS. , -

- 3.
, , deluge-movie-callback.sh -
wget -qO - http://192.168.13.1:32400/library/sections/3/refresh >> /dev/null ;
URL ?deep=1
?force=1
.
, deluge-movie-callback.sh Execute. , .
.
. , , , - , . - , . , . Deluge , , . Label. , , , , deluged , . , c sudo su - .
..srt,
. , . , - , , ( ). : , - . , , .
extractor.sh :
#!/bin/bash if [[ "$1" != *.mkv ]]; then exit 0; fi; FORMAT_FULL=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\).*language:([[:alpha:]]+)"; FORMAT_SHORT=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\)"; baseName=${1%.mkv}; requiredLangs=$(echo "$2" | tr "," "\n"); echo "$(date +"%D %T"): $baseName" >> /specshare/log.txt; counter=0; tracks=$(mkvmerge -I "$1"); while read -r track; do echo -e "$(date +"%D %T"): $track" >> /specshare/log.txt; if [[ $track =~ $FORMAT_FULL ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; lang=${BASH_REMATCH[4]}; codec=${BASH_REMATCH[3]}; else if [[ $track =~ $FORMAT_SHORT ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; codec=${BASH_REMATCH[3]}; lang="unk"; else id=-1; fi fi; langMatch=false; idMatch=false; typeMatch=false; codecMatch=false; shouldExtract=false; for reqLang in $requiredLangs; do [ "$reqLang" == "$lang" ] && langMatch=true; done [ "$tType" == "subtitles" ] && typeMatch=true; [ "$codec" == "S_TEXT/UTF8" ] && codecMatch=true; [ $id -ne -1 ] && idMatch=true; $langMatch && $idMatch && $typeMatch && $codecMatch && shouldExtract=true; if $shouldExtract ; then subName="$baseName.$lang.srt" if [ -f "$subName" -o "$lang" == "unk" ]; then subName="$baseName.$lang$counter.srt"; (( counter++ )); fi mkvextract tracks "$1" $id:"$subName"; fi done <<< "$tracks"
: , , //, . , capturing groups POSIX- , , , . , .
, . - Plex.
Plex Media Server Plex Media Scanner
, /usr/lib/plexmediaserver/
, . , :
; - , - PMS;
, . 2 sudoers
- sudo. , LD_LIBRARY_PATH
( 1) Deluge, , .
, , , ...
GET-
- PMS, UI , GET- URL . URL :
http://<serverIP>:32400/library/sections/<sectionId>/refresh
sectionId
- PMS. , -

- 3.
, , deluge-movie-callback.sh -
wget -qO - http://192.168.13.1:32400/library/sections/3/refresh >> /dev/null ;
URL ?deep=1
?force=1
.
, deluge-movie-callback.sh Execute. , .
.
. , , , - , . - , . , . Deluge , , . Label. , , , , deluged , . , c sudo su - .
..srt,
. , . , - , , ( ). : , - . , , .
extractor.sh :
#!/bin/bash if [[ "$1" != *.mkv ]]; then exit 0; fi; FORMAT_FULL=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\).*language:([[:alpha:]]+)"; FORMAT_SHORT=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\)"; baseName=${1%.mkv}; requiredLangs=$(echo "$2" | tr "," "\n"); echo "$(date +"%D %T"): $baseName" >> /specshare/log.txt; counter=0; tracks=$(mkvmerge -I "$1"); while read -r track; do echo -e "$(date +"%D %T"): $track" >> /specshare/log.txt; if [[ $track =~ $FORMAT_FULL ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; lang=${BASH_REMATCH[4]}; codec=${BASH_REMATCH[3]}; else if [[ $track =~ $FORMAT_SHORT ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; codec=${BASH_REMATCH[3]}; lang="unk"; else id=-1; fi fi; langMatch=false; idMatch=false; typeMatch=false; codecMatch=false; shouldExtract=false; for reqLang in $requiredLangs; do [ "$reqLang" == "$lang" ] && langMatch=true; done [ "$tType" == "subtitles" ] && typeMatch=true; [ "$codec" == "S_TEXT/UTF8" ] && codecMatch=true; [ $id -ne -1 ] && idMatch=true; $langMatch && $idMatch && $typeMatch && $codecMatch && shouldExtract=true; if $shouldExtract ; then subName="$baseName.$lang.srt" if [ -f "$subName" -o "$lang" == "unk" ]; then subName="$baseName.$lang$counter.srt"; (( counter++ )); fi mkvextract tracks "$1" $id:"$subName"; fi done <<< "$tracks"
: , , //, . , capturing groups POSIX- , , , . , .
, . - Plex.
Plex Media Server Plex Media Scanner
, /usr/lib/plexmediaserver/
, . , :
; - , - PMS;
, . 2 sudoers
- sudo. , LD_LIBRARY_PATH
( 1) Deluge, , .
, , , ...
GET-
- PMS, UI , GET- URL . URL :
http://<serverIP>:32400/library/sections/<sectionId>/refresh
sectionId
- PMS. , -

- 3.
, , deluge-movie-callback.sh -
wget -qO - http://192.168.13.1:32400/library/sections/3/refresh >> /dev/null ;
URL ?deep=1
?force=1
.
, deluge-movie-callback.sh Execute. , .
.
. , , , - , . - , . , . Deluge , , . Label. , , , , deluged , . , c sudo su - .
..srt,
. , . , - , , ( ). : , - . , , .
extractor.sh :
#!/bin/bash if [[ "$1" != *.mkv ]]; then exit 0; fi; FORMAT_FULL=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\).*language:([[:alpha:]]+)"; FORMAT_SHORT=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\)"; baseName=${1%.mkv}; requiredLangs=$(echo "$2" | tr "," "\n"); echo "$(date +"%D %T"): $baseName" >> /specshare/log.txt; counter=0; tracks=$(mkvmerge -I "$1"); while read -r track; do echo -e "$(date +"%D %T"): $track" >> /specshare/log.txt; if [[ $track =~ $FORMAT_FULL ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; lang=${BASH_REMATCH[4]}; codec=${BASH_REMATCH[3]}; else if [[ $track =~ $FORMAT_SHORT ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; codec=${BASH_REMATCH[3]}; lang="unk"; else id=-1; fi fi; langMatch=false; idMatch=false; typeMatch=false; codecMatch=false; shouldExtract=false; for reqLang in $requiredLangs; do [ "$reqLang" == "$lang" ] && langMatch=true; done [ "$tType" == "subtitles" ] && typeMatch=true; [ "$codec" == "S_TEXT/UTF8" ] && codecMatch=true; [ $id -ne -1 ] && idMatch=true; $langMatch && $idMatch && $typeMatch && $codecMatch && shouldExtract=true; if $shouldExtract ; then subName="$baseName.$lang.srt" if [ -f "$subName" -o "$lang" == "unk" ]; then subName="$baseName.$lang$counter.srt"; (( counter++ )); fi mkvextract tracks "$1" $id:"$subName"; fi done <<< "$tracks"
: , , //, . , capturing groups POSIX- , , , . , .
, . - Plex.
Plex Media Server Plex Media Scanner
, /usr/lib/plexmediaserver/
, . , :
; - , - PMS;
, . 2 sudoers
- sudo. , LD_LIBRARY_PATH
( 1) Deluge, , .
, , , ...
GET-
- PMS, UI , GET- URL . URL :
http://<serverIP>:32400/library/sections/<sectionId>/refresh
sectionId
- PMS. , -

- 3.
, , deluge-movie-callback.sh -
wget -qO - http://192.168.13.1:32400/library/sections/3/refresh >> /dev/null ;
URL ?deep=1
?force=1
.
, deluge-movie-callback.sh Execute. , .
.
. , , , - , . - , . , . Deluge , , . Label. , , , , deluged , . , c sudo su - .
Source: https://habr.com/ru/post/202870/
All Articles