Snabbt inlägg som skall städas upp lite sen, men skriver ner det nu medans jag har det i tankarna och precis satt upp det.<br /><br />Efter att ha satt upp min dedikerade transmission VM på servern så möts jag av problemet att vissa stjärthattar laddar upp saker på diverse &quot;HELT LEGALA&quot; sidor i rar format. Eftersom Emby inte kan läsa arkiv så tvingas vi köra någon sorts skript för att automatiskt packa upp sagda filer.<br /><br />Vi börjar med att stanna upp transmission demonen<br />[code]root@transmission:~# systemet stop transmission-daemon[/code]<br /><br />därefter ändrar vi följande rader i /etc/transmission-daemon/settings.json<br />[code]&nbsp; &nbsp; <br />&nbsp; &nbsp; &quot;script-torrent-done-enabled&quot;: false, <br />&nbsp; &nbsp; &quot;script-torrent-done-filename&quot;: &quot;&quot;, <br />[/code]<br />till<br />[code]<br />&nbsp; &nbsp; &quot;script-torrent-done-enabled&quot;: true, <br />&nbsp; &nbsp; &quot;script-torrent-done-filename&quot;: &quot;/opt/transmission/scripts/scan_library.sh&quot;, <br />[/code]<br /><br />filnamnet kan vara vad man vill, men jag valde att lägga det under /opt/transmission/scripts för att det känns logiskt för mig.<br /><br />Därefter kan vi redigera scriptet. Att lista ut vilket folder och vilka filer vi skall köra på skulle vara fantastiskt svårt, så som tur är så skickar transmission med några environment parameters till vårat script. Vi kommer använda två av dem. &quot;${TR_TORRENT_NAME}&quot; och &quot;${TR_TORRENT_DIR}&quot;. Dessa ger oss namnet på den torrent vi hämtat, och vilken mapp vi lagt den i. Så vi börjar vårat script.<br />[code]<br />#!/bin/bash<br /><br />cd &quot;${TR_TORRENT_DIR}&quot;<br />[/code]<br /><br />Vi börjar med att byta directory till det directory där vår nu färdiga torrent hamnat.<br />Därefter behöver vi lista ut om den torrent vi laddat ner är ett directory, lyckligtvis är det lätt att göra i bash.<br /><br />[code]<br />if [ -d &quot;${TR_TORRENT_NAME}&quot; ]<br />then<br />&nbsp; cd &quot;${TR_TORRENT_NAME}&quot;<br />fi<br />[/code]<br /><br />Brilliant! men att bara sätta vårat working directory är bara ett steg på vägen. Vi har ännu inte åstadkommit något.<br />Härnäst måste vi se om det finns några .rar filer i vår torrent. För det så kan vi använda vår gamla vän find.<br /><br />[code]<br />if [ -d &quot;${TR_TORRENT_NAME}&quot; ]<br />then<br />&nbsp; cd &quot;${TR_TORRENT_NAME}&quot;<br />&nbsp; find . -iname &quot;*.rar&quot;<br />fi<br />[/code]<br /><br />Nu så börjar saker hända här. Vi letar efter alla filer i vårat nuvarande directory, samt subdirectories efter filer som slutar med .rar (case insensitive matchning).<br />Men... vi gör ännu inget med dem.. det får vi ändra på. Man kan använda sig av finds -execdir flagga för att köra kommandon direkt från det, men jag stötte på problem när jag försökte extrahera flera saker samtidigt via den vägen. så vi kör ett litet fulhack här istället.<br /><br />[code]<br />if [ -d &quot;${TR_TORRENT_NAME}&quot; ]<br />then<br />&nbsp; cd &quot;${TR_TORRENT_NAME}&quot;<br />&nbsp; find . -iname &quot;*.rar&quot; | xargs -L1 unrar e -o- <br />fi<br />[/code] <br /><br />Sedärja, nu så pipar vi in outputen från find till xargs som kör kommandot unrar e -o- med filepathen vi fick av find som argument. Flaggan -L1 begränsar xarg till att bara köra en instans per rad find ger till oss samtidigt. <br />och där så är vårt mål fixat. Men vänta, det finns mer!<br /><br />Folk som arkiverar ihop sin media skickar oftast med en mapp med sample filer, oftast i en mapp som heter sample så man kan se vad man laddar ner, en bra tanke, men som ger mig massa äckliga samplefiler i Emby som jag inte vill ha. Jag skulle kunna ta bort dessa, men för att vara en god medmänniska så vill jag kunna seeda hela torrents. Så istället så vill vi skapa en .ignore fil i mappar som heter sample. För det kan vi återigen använda find.<br /><br />[code]<br />if [ -d &quot;${TR_TORRENT_NAME}&quot; ]<br />then<br />&nbsp; cd &quot;${TR_TORRENT_NAME}&quot;<br />&nbsp; find . -iname &quot;*.rar&quot; | xargs -L1 unrar e -o- <br />&nbsp; find . -type d -iname sample -exec /bin/bash -c &#039;touch &quot;$0/.ignore&quot;&#039; {} \;<br />fi<br />[/code]<br /><br />Nu så, find letar efter filer av typ d, det vill säga direktories, som har namnet sample ännu case insensitive. Om vi hittar en mapp med det namnet så exekverar vi ett snabbt bash script som skapar en .ignore fil i det directoryt. Nu så har vi ett riktigt bra script! Men... vad händer om torrenten inte är en mapp, utan en faktisk rarfil? då kommer vårat script inte göra något alls...<br />Vi får lägga till ett case för det!<br /><br />[code]<br />if [ -d &quot;${TR_TORRENT_NAME}&quot; ]<br />then<br />&nbsp; cd &quot;${TR_TORRENT_NAME}&quot;<br />&nbsp; find . -iname &quot;*.rar&quot; | xargs -L1 unrar e -o-<br />&nbsp; find . -type d -iname sample -exec /bin/bash -c &#039;touch &quot;$0/.ignore&quot;&#039; {} \;&nbsp; <br />else<br />&nbsp; if [ &quot;${TR_TORRENT_NAME: -4}&quot; == &quot;.rar&quot; ]<br />&nbsp; then<br />&nbsp; &nbsp; unrar -e -o- &quot;${TR_TORRENT_NAME}&quot;<br />&nbsp; fi<br />fi<br />[/code]<br /><br />Där, nu kollar vi om de sista fyra chars:en i namnet på vår torrent är .rar, och om det är det så packar vi upp den mappen. <br />Tyvärr så detta inte case insensitive, men jag tror chansen att någon sparar filerna som .RAR är ganska liten.. vi kanske fixar upp det här mer sen..<br /><br />Men låt oss nu kolla på vårat fullständiga script.<br /><br />[code]<br />#!/bin/bash<br /><br />cd &quot;${TR_TORRENT_DIR}&quot;<br /><br />if [ -d &quot;${TR_TORRENT_NAME}&quot; ]<br />then<br />&nbsp; cd &quot;${TR_TORRENT_NAME}&quot;<br />&nbsp; find . -iname &quot;*.rar&quot; | xargs -L1 unrar e -o-<br />&nbsp; find . -type d -iname sample -exec /bin/bash -c &#039;touch &quot;$0/.ignore&quot;&#039; {} \;&nbsp; <br />else<br />&nbsp; if [ &quot;${TR_TORRENT_NAME: -4}&quot; == &quot;.rar&quot; ]<br />&nbsp; then<br />&nbsp; &nbsp; unrar -e -o- &quot;${TR_TORRENT_NAME}&quot;<br />&nbsp; fi<br />fi<br />[/code]<br /><br />Jag skulle säga att det ser riktigt bra ut.. men det är ett par saker jag skulle vilja lägga till.<br />Emby scannar sitt mediebibliotek med en timer, man kan välja intervall på den.. men att ha ett cronjob som dumt sitter och kör i bakgrunden känns antikt.<br />Vi lever i den moderna världen, med snajsiga api:er. Så vi börjar med att gå in i emby och gå till manage server, därefter går vi till advanced och security där vi skapar en api nyckel för transmission.<br />Vi kopierar vår nya api-token och lägger till följande rader i vårat script.<br /><br />[code]<br />curl -d &quot;&quot; -H &quot;X-MediaBrowser-Token: API_TOKEN&quot; http://emby.grevennet.org/library/refresh<br />curl -v -d &quot;&quot;&nbsp; -H &quot;X-MediaBrowser-Token: API_TOKEN&quot; http://emby.grevennet.org:8096/emby/ScheduledTasks/Running/2c66a88bca43e565d7f8099f825478f1<br />[/code] <br /><br />Såklart så skall API_TOKEN bytas ut mot den token vi tidigare kopierade. Och emby.grevennet.org är adressen till min Emby server, så den behöver bytas till den ip eller det namn där er Emby server finns. Det dessa två rader gör är att använda embys api för att kicka igång först en library scan, och därefter kickar den igång en scan efter nedladdningsbara subtitles enligt de inställningar vi valt för våra olika bibliotek.<br /><br />Så vårt fullständiga script är nu<br /><br />[code]<br />#!/bin/bash<br /><br />cd &quot;${TR_TORRENT_DIR}&quot;<br /><br />if [ -d &quot;${TR_TORRENT_NAME}&quot; ]<br />then<br />&nbsp; cd &quot;${TR_TORRENT_NAME}&quot;<br />&nbsp; find . -iname &quot;*.rar&quot; | xargs -L1 unrar e -o-<br />&nbsp; find . -type d -iname sample -exec /bin/bash -c &#039;touch &quot;$0/.ignore&quot;&#039; {} \;&nbsp; <br />else<br />&nbsp; if [ &quot;${TR_TORRENT_NAME: -4}&quot; == &quot;.rar&quot; ]<br />&nbsp; then<br />&nbsp; &nbsp; unrar -e -o- &quot;${TR_TORRENT_NAME}&quot;<br />&nbsp; fi<br />fi<br /><br />curl -d &quot;&quot; -H &quot;X-MediaBrowser-Token: API_TOKEN&quot; http://emby.grevennet.org/library/refresh<br />curl -v -d &quot;&quot;&nbsp; -H &quot;X-MediaBrowser-Token: API_TOKEN&quot; http://emby.grevennet.org:8096/emby/ScheduledTasks/Running/2c66a88bca43e565d7f8099f825478f1<br />[/code]<br /><br />Och där skulle jag säga att jag är nöjd. <br />Så vi ändrar rättigheterna på script filen så att transmission användaren kan använda den.<br />[code]chown transmission:transmission /opt/transmission/scripts/scan_library.sh[\code]<br />[code]chmod 755 /opt/transmission/scipts/scan_library.sh[/code]<br />Jag har redan satt upp att transmission kör som användare transmission, men ni kanske behöver göra det innan ni gör ovanstående. Eller byta vilken användare ni re-assignar scripten till.<br /><br />Det var allt för mig denna gång.<br /><br />//Greven