staging.inyokaproject.org

Name der Serie als Ordner, Dateien hineinkopieren

Status: Gelöst | Ubuntu-Version: Ubuntu 20.04 (Focal Fossa)
Antworten |

HamburgJoe

Anmeldungsdatum:
7. Oktober 2017

Beiträge: 37

Moin an alle,

ich habe da mal wieder ein Problem. ☺

Habe einen Ordner "Serien" in diesem Ordner befinden sich Serien in mehreren Dateien:

Ordner "Serien"

  • Serie A Staffel 1 Folge 1.strm

  • Serie A Staffel 1 Folge 2.strm

  • Serie A Staffel 2 Folge 1.strm

  • Serie A Staffel 2 Folge 2.strm

  • Serie B Staffel 1 Folge 1.strm

  • Serie B Staffel 1 Folge 2.strm

Gibt es eine Möglichkeit, automatisiert Ordner erstellen zu lassen und die Dateien in den entsprechenden verschieben zu lassen?

Das Ergebnis soll wie folgt aussehen:

Ordner "Serien"

  • Ordner "Serie A"

  • - Ordner "Staffel 1"

  • - - Datei "Folge 1.strm"

  • - - Datei "Folge 2.strm"

  • - Ordner "Staffel 2"

  • - - Datei "Folge 1.strm"

  • - - Datei "Folge 2.strm"

  • Ordner "Serie B"

  • - Ordner "Staffel 1"

  • - - Datei "Folge 1.strm"

  • - - Datei "Folge 2.strm"

Diese Infos sollen möglichst aus den Dateinamen der entsprechenden Datei entnommen werden. Außerdem sollen die Dateien dann auch entsprechend in den Ordner verschoben werden und der Dateiname angepasst werden.

Über Eure Hilfe würde ich mich riesig freuen.

Danke und beste Grüße

Joe

dingsbums

Anmeldungsdatum:
13. November 2010

Beiträge: 3793

Vorausgesetzt, die Dateien liegen alle in einem Ordner (ohne Unterordner):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#! /bin/bash

# zu durchsuchenden ordnerpfad anpassen
suchordner="/pfad/zum/ordner" 

# dateiliste erzeugen
find  "$suchordner" -maxdepth 1 -type f -name "*.strm" -exec basename -a {} + | sort | grep -vE "liste.txt" | tee "$suchordner/liste.txt" &>/dev/null

cat "$suchordner/liste.txt" | while read line;do
   serienordner=$(echo "$line" | cut -d ' ' -f1-2)
   staffelordner=$(echo "$line" | cut -d ' ' -f3-4)
   dateiname=$(echo "$line" | cut -d ' ' -f5-6)

   if [ !  -d "$suchordner"/"$serienordner" ];then
      mkdir -v "$suchordner"/"$serienordner"
   fi
   if [ !  -d "$suchordner"/"$serienordner"/"$staffelordner" ];then
      mkdir -v "$suchordner"/"$serienordner"/"$staffelordner"
   fi
   if [ !  -f "$suchordner"/"$serienordner"/"$staffelordner"/"$dateiname" ];then
      cp -v "$line" "$suchordner"/"$serienordner"/"$staffelordner"/"$dateiname"  # für verschieben mv statt cp verwenden
   else
      echo "$suchordner"/"$serienordner"/"$staffelordner"/"$dateiname" existiert bereits
   fi
done

Nachtrag: Sollten die Dateinamen nicht (wörtlich!) "Serie A Staffel 2 Folge 2.strm" sein, dann funktioniert das Skript natürlich nicht. Da müsstest du konkrete Beispiele für mögliche Dateinamen liefern.

Bleys

Anmeldungsdatum:
13. August 2006

Beiträge: 6172

TinyMediaManager

Der macht genau das was Du möchtest. Einzige Voraussetzung: Die einzelnen Folgen müssen SxxExx im Namen enthalten. Wenn die Folgen schon in einem Ordner mit dem Namen der Serie sind, reicht sogar nur die Staffel/Episode (S01E01.mp4 z.B.)

Möglicherweise ein Nachteil für Deine Vorgabe ist, das der TMM auch alle Infos zur Serie und den Episoden aus dem Internet holt und zusätzlich speichert. Siehe Screenshots.

Anhang

dingsbums

Anmeldungsdatum:
13. November 2010

Beiträge: 3793

Falls du das von Bleys empfohlene Programm nicht nutzen möchtest, hier eine aktualisierte Skript-Version, welche mit beliebigen Dateinamen zurechtkommen sollte. Es wird jeweils das Wort "Staffel" und "Folge" als Trennmerkmal benutzt (Groß- / Kleinschreibung egal).

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#! /bin/bash

suchordner="/Pfad/zum/Ordner"
#suchordner="."

# dateiliste erzeugen
find  "$suchordner" -maxdepth 1 -type f -name "*.strm" -exec basename -a {} + | sort | grep -vE "liste.txt" | tee "$suchordner/liste.txt" &>/dev/null

cat "$suchordner/liste.txt" | while read line;do

   serie=${line%[Ss][Tt][Aa][Ff][Ff][Ee][Ll]*}
   staffelfolge=${line/*$serie}   # zwischenschritt
   staffel=${staffelfolge%[Ff][Oo][Ll][Gg][Ee]*}
   folge=${staffelfolge/*$staffel}

   # _ und - herausfiltern
   serie=$(echo $serie | sed 's#[_-]##g')
   staffel=$(echo $staffel | sed 's#[_-]##g')
   folge=$(echo $folge | sed 's#[_-]##g')

   # jeweils erster buchstabe gross
   serie=$(echo $serie | tr [A-Z] [a-z] | sed -e 's#^.#\U&#g; s# .#\U&#g')
   staffel=$(echo $staffel | tr [A-Z] [a-z] | sed -e 's#^.#\U&#g; s# .#\U&#g')
   folge=$(echo $folge | tr [A-Z] [a-z] | sed -e 's#^.#\U&#g; s# .#\U&#g')

   if [ !  -d "$suchordner"/"$serie" ];then
      mkdir -v "$suchordner"/"$serie"
   fi
   if [ !  -d "$suchordner"/"$serie"/"$staffel" ];then
      mkdir -v "$suchordner"/"$serie"/"$staffel"
   fi
   if [ !  -f "$suchordner"/"$serie"/"$staffel"/"$folge" ];then
      cp -v "$line" "$suchordner"/"$serie"/"$staffel"/"$folge"  # für verschieben mv statt cp verwenden
   else
      echo "$suchordner"/"$serie"/"$staffel"/"$folge" existiert bereits
   fi
done

Aus

So ein Zufall_StAFfel 17 - FOlGe 1.strm

wird dann

So Ein Zufall
└── Staffel 17
   └──  Folge 1.strm

HamburgJoe

(Themenstarter)

Anmeldungsdatum:
7. Oktober 2017

Beiträge: 37

Moin,

erneut 1000 dank an alle. Hat perfekt funktioniert!

Schönes Wochenende ☺

Antworten |