myGully.com

myGully.com (https://mygully.com/index.php)
-   Linux & BSD (https://mygully.com/forumdisplay.php?f=401)
-   -   pyload - automatische Sortierung von Serien mit Bash (https://mygully.com/showthread.php?t=2904636)

thyriel 19.04.13 01:05

pyload - automatische Sortierung von Serien mit Bash
 
Nachdem ich nen Haufen Serien runterlade und sich da im Laufe der Zeit dann im download Ordner von pyload eine ganze Menge ansammelt dacht ich mir das müsste sich doch mit einem netten bash S***** automatisieren lassen die richtig in einen Serien Ordner einzusortieren ;)


Da das vielleicht auch der eine oder andere gerne hätte post ich das mal hier zur freien Verwendung.

Folgende Einstellungen müssen im pyload vorgenommen werden damit das funktionieren kann:
General -> "Create Folder for each package" auf "an"
Permissions -> es muss sichergestellt werden das der user der das S***** laufen lässt auch Schreibzugriff auf alle Ordner / Dateien hat die pyload runterlädt / erstellt.
Sieht bei mir zb folgendermaßen aus:

Zusatzprogramme -> ExtractArchive -> "Extract archives in archvies" auf "an"
Zusatzprogramme -> ExtractArchive -> "Create subfolder for each package" auf "an"
Zusatzprogramme -> ExtractArchive -> "Extract files to" Pfad merken um das S***** anzupassen
Zusatzprogramme -> ExtractArchive -> "Delete Archives when done" auf "an" (braucht ja keiner mehr nach dem extracten)
Erklärung des S*****s:


Beim hinzufügen der Dateien im Downloader muss sichergestellt sein das diese richtig benannt sind zb "Walking Dead S03E02".
Ladet man sich DLCs von share-links ist das eh normalerweise schon der Fall.

Nun das S*****:
Code:

#!/bin/bash

#Variablen für die Suche setzen
#-> brauchen nicht für jede Serie angepasst zu werden
search="*.avi"  #Dateityp definieren
sourcedir="/mnt/int/pyload/" #absoluter Dateipfad wo die Dateien aktuellen liegen
globaldestinationdir="/mnt/int/serien/" #Zielpfad (für alle Serien gleich)
usergroup="users"  #Benutzergruppe für neue Verzeichnisse
umaskused="007"  #umask für neue Verzeichnisse
i=-1  #Counter startwert -1

############################################################################
#Serien definieren
#für jede weitere Serie alle drei Zeilen kopieren und
#innerhalb des Blocks anhängen.
#die let i=i+1 Zeile unverändert lassen

let i=i+1 #array counter um 1 raufsetzen
#relativer Zielpfad (wird an $globaldestinationdir angehängt)
destinationdir[$i]="The Walking Dead/S03/"
#Name der Serie (muss genau so ein Teil des Verzeichnis Namens sein)
name[$i]="Walking Dead S03"

let i=i+1 #array counter um 1 raufsetzen
#relativer Zielpfad (wird an $globaldestinationdir angehängt)
destinationdir[$i]="Noch so ne Serie/S01/"
#Name der Serie (muss genau so ein Teil des Verzeichnis Namens sein)
name[$i]="Noch so ne Serie S01"

############################################################################


#PART 1
#Löschen vorhandener Sample Files
echo "PART 1 -> sample Files löschen"
for x in $(seq 0 $i)
do
  #Ordner finden die den Namen der Serie enthalten
  #danach in jedem gefundenen Ordner nach sample Files suchen
  find "${sourcedir}" -name "*${name[$x]}*" -exec find "{}" -name "*sample*" \; | while read FILE; do
      #Samples löschen
      rm -v "${FILE}"
  done
done

#PART 2
#Dateien sortieren und verschieben
echo "PART 2 -> Files verschieben"
for x in $(seq 0 $i)
do
  #Zielverzeichnis erstellen (falls es nicht existiert) und Dateirechte anpassen
  ( umask ${umaskused} ; mkdir -p -v "${globaldestinationdir}${destinationdir[$x]}" ; )
  chown -R -v :${usergroup} "${globaldestinationdir}${destinationdir[$x]%%/*}"
  #Ordner finden die den Namen der Serie enthalten
  #danach in jedem gefundenen Ordner nach Dateien suchen die dem $search Kriterium entsprechen
  find "${sourcedir}" -name "*${name[$x]}*" -exec find "{}" -name "${search}" \; | while read FILE; do
      #jede gefundene Datei ins entsprechende Zielverzeichnis verschieben
      mv -v "${FILE}" "${globaldestinationdir}${destinationdir[$x]}"
  done
done

#PART 3
echo "PART 3 -> Dirs löschen"
#Verzeichnisse mit allen restlichen Inhalten löschen (zb unterarchive)
for x in $(seq 0 $i)
do
  find "${sourcedir}" -name "*${name[$x]}*" -exec rm -R -v "{}" \;
done
exit

Als erstes muss man nun das S***** an seine eigene Ordnerstruktur anpassen:
- sourcedir: man trägt das ein was in pyload im ExtractArchive eingetragen ist (mit Slash / am schluss)
- globaldestinationdir: das Zielverzeichnis eintragen in dem alle Serien abgelagert werden
- usergroup: Die Gruppe die für alle neu erstellten Verzeichnisse eingestellt wird
- die umask für neu erstellte Verzeichnisse (007 = besitzer und gruppe lesen/schreiben, andere gar nichts)
- im Block mit den vielen # kopiert man für jede Serie die man eingeordnet haben möchte die 3 (ohne Kommentarzeilen gezählt) Zeilen, beginnend mit "let i=i+1)
- destinationdir ist dann ein relativer Pfad. Er kann mehrere Subordner enthallten um zb Staffeln zu trennen.
- name ist ein Teil des jetzigen Ordnernamens. Am besten man trägt hier sowas wie "Walking Dead S03" ein. Funktioniert natürlich auch ohne das S03, aber wenn es zu dem Fall kommt das man mal mehrere Folgen verschiedener Staffeln runtergeladen hat kann das S***** diese dann nicht mehr unterscheiden

P.S: Verwendung auf eigene Gefahr
Ich rate dringend davon ab das s***** als root / sudo laufen zu lassen
Außerdem ist keinerlei Fehlerroutine enthallten, kommt es also zu einem Fehler (weil zb am Ziel kein Platz mehr ist oder Dateirechte falsch gesetzt sind) werden die Quelldateien trotzdem gelöscht
Das S***** wurde auch nur unter Arch Linux getestet, keine Garantie das es 1:1 unter Ubuntu/Debian läuft

P.P.S: Folgt soon(tm)

Wahrscheinlich pass ich das S***** demnächst noch so an das man es auch mit Parametern aufrufen kann zb:
Code:

s*****.sh "Startverzeichnis" "Zielverzeichnis" [optional "Dateityp"]
damit man damit auch ohne S*****passung sortieren kann, bzw. sich auch Filme sortieren lassen

spartan-b292 15.07.13 22:09

Super, dumm nur dass nicht jeder XBMC verwendet.

thyriel 16.07.13 07:34

Zitat:

Zitat von spartan-b292 (Beitrag 24723114)
Super, dumm nur dass nicht jeder XBMC verwendet.

Vor allem läuft das sicher nicht auf einem mini Server der nichtmal X installiert hat ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:34 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.