Mediensammlung entrümpeln

  • Hallo,


    ich würde gerne meine Mediensammlung entrümpeln.
    Gedacht habe ich an sowas wie wenn IMDB Bewertung unter 7 dann verschiebe die Datei/Ordner in einen separaten Ordner.


    Dann wäre deutlich einfacher als jeden Film selbst in imdb nachzuschauen.


    Was gibt es da für Möglichkeiten?


    Vielen Dank!


    Gruß


    Revan335

  • Die einfachste Möglichkeit ist ein Script.


    In den .nfo Files steht das Rating drin. Also kannst du danach suchen z.b. mit awk und dann einen einfachen if else Befehl, der alle zugehörigen Dateien löscht, wenn das Rating eben kleiner als 7 ist, absetzten.


    Vielleicht kannst ja auch qsirch dazu überreden, dir die entsprechenden Files raus zu suchen dann brauchst die nur noch löschen.



    Ich frage mich allerdings ob das wirklich Sinnvoll ist. Gefallen dir denn wirklich alle Filme die über 7 sind besser als die die darunter sind? Am ende fehlen dir liebgewonnene Filmschätze.

  • Die 7 ist nur ein Beispiel.


    Ich würde natürlich nochmal drüber schauen was er löschen will.


    Also muss ich erst Kodi mit IMDb/tvdb ... drüber laufen lassen?


    Oder geht das auch ohne?


    Die nfo Dateien landen doch dann auf dem Kodi Gerät nicht dort wo die Daten liegen, richtig?

  • Eigentlich brauchst du nur ein Programm, dass dir die nfo inklusive Rating erstellt, dass kann bestimmt auch der MediaElch auf deinem PC


    Also bei mir landen die nfo Datein, dort wo auch die Filme liegen. Aber das lässt sich möglicherweise einstellen.

  • Mit Media Elch klappt schon mal das erstellen der nfo Dateien.


    Mit

    Code
    grep rating   *.nfo


    Wird auch entsprechend der Name und das Rating ausgegeben.



    Code
    Wall E.nfo:    <rating>8.4</rating>

    Allerdings komme ich nicht drauf dies mit AWK zu scripten und dann auch noch die zugehörigen Daten (Dateien/Ordner) zu verschieben.

  • Ok, bei awk müsste ich jetzt auch nachschauen wie es genau geht. Hab damit schon eine weile nicht mehr gearbeitet.


    Aber ich habe mal von christian vor einiger Zeit ein kleines Skript bekommen, das ebenfalls einen Wert aus einer xml Datei geparst hat.


    Diese Zeile müsste für dich entscheidend sein. Christian hat nach zip Dateien gesucht also musst diesen Teil entwas anpassen, der hintere Teil nach dem uniq müsste aber genau das sein was du brauchst um die größer/kleiner Zeichen los zu werden. :)


    [ /bin/grep zip $LOCAL_QPKG_XML | uniq | /bin/sed -e 's/<[^>]*>//g' -e 's/ //g' > $RESULT

  • Das filtern funktioniert schon mal vielen Dank!


    Code
    grep -Ew "rating|title" *.nfo | uniq | /bin/sed -e 's/<[^>]*>//g' -e 's/ //g' > test.txt


    Jetzt fehlt nur noch das verschieben der Daten, wenn Rating unterhalb Wert x ist.
    Wie mache ich das am besten?
    Es muss nicht awk sein kann auch was anderes sein.

    2 Mal editiert, zuletzt von Revan335 ()

  • Versuchs mal damit, kann aber sein, dass noch fehler im code sind. Ich habe es nicht getestet. Am wahrscheinlichsten ist ein Fehler mit den Anführungszeichen. Ich komm da immer etwas durcheinander mit diesen 1000 verschiedenen Anführungszeichen.


    Code
    if ( `awk '{ print $1 }' test.txt` < 8 ) { mv `awk '{ print $2 }' test.txt` /pfad/zum/ordner }

    Ah und falls bei dir in der test.txt zwischen Rating und Film ein |-Zeichen ist ersetzt es bitte durch ein leerzeichen, dann müsste wenigstens der awk Teil selbst funktionieren ansonsten muss man ihn noch mal anpassen. Ich glaube mit awk -F"|" kann man ein anderes Trennzeichen in diesem Fall eben das |-Zeichen festlegen. Wenn du Leerzeichen verwendest kannst du dir das eben sparen. :)

  • Ihn scheinen noch die Klammern zu stören.
    Was aber eigentlich laut https://wiki.ubuntuusers.de/awk/ stimmen sollte.

    Code
    bash: Syntaxfehler beim unerwarteten Wort `{'

    Sieht nach den vor mv aus.
    Wenn man die ändert, dann schreibt er

    Code
    bash: Syntaxfehler beim unerwarteten Wort `('

    Einmal editiert, zuletzt von Revan335 ()

  • Du kannst sie nicht einfach ändern, die werden gebraucht. ;)


    Erfahrungsgemäß liegt es an den Anführungszeichen. Zum Teil muss man die ändern wenn noch mal welche hinzu kommen. Das macht es so undurchsichtig wenn man es nicht ständig macht.


    Ich habe jetzt auch schon ein wenig gegooglt aber nicht das richtige gefunden.
    Ich schau es mir morgen noch mal an. Aber ich sollte langsam Feierabend machen, ich habe morgen früh einen wichtigen Termin.

  • Vielen Dank schon mal für deine Hilfe!


    Ich versuche noch den Zeilenanfang zu entfernen.


    Bspw.:

    Code
    Wall E.nfo:    Wall EWall E.nfo:    8.4


    Die Leerzeichen werden ja durch den zweiten sed Befehl entfernt.
    Wie kann man den anpassen das dieser nur bis zur Zahl geht?


    Mein aktueller Versuch der nicht funktioniert um alles vor dem : zu entfernen.

    Code
    -e '/^,:/s/[a-z]/ /g'

    Ersetze Buchstaben a-z durch "Leerzeichen" im Bereich Zeilenanfang bis :



    Ich denke am besten kann der mv Befehl arbeiten wenn die Ausgabe so aussieht:

    Code
    Wall E
    8.4
  • Braucht man nicht anpassen, das ist der Teil der von dem Awk skript super übernommen werden
    kann. Das funktioniert nämlich auch spaltenweise.


    Das ist dieser Teil hier. $1 Beschreibt die erste Spalte in der Textdatei, wleche durch leerzeichen von einander getrennt sind.
    awk '{ print $1 }' test.txt


    Ich habe dich übrigens nicht vergessen, habe die Lösung aber noch nicht gefunden. :)


    Wäre alles einfach wenn es in Filmtiteln keine Leerzeichen gäbe.

  • Habe mal einen Bekannten gefragt:

    Code
    if [ `awk '$1 < 8' /pfad/zur/datei/datei` ]thenmv `awk '{print $2}' /pfad/zur/datei/datei` /pfad/zum/ordnerelseecho "Nichts gefunden!"fi


    Hierbei erhalte ich leider:



    Code
    bash: [: 5: Einstelliger (unärer) Operator erwartet.
    Nichts gefunden!

    Wo steckt nun der vermutlich Detail Fehler?

    Einmal editiert, zuletzt von Revan335 ()

  • Erst dies: (Im Terminal)


    Code
    grep -Ew "rating|title" *.nfo | uniq | /bin/sed -e 's/<[^>]*>//g' -e 's/ //g' > test.txt



    Ergibt bspw. dies:

    Code
    WallE2.nfo:WallE2WallE2.nfo:8.4WallE3.nfo:WallE3WallE3.nfo:5.4WallE.nfo:WallEWallE.nfo:6.4


    Dann dies: (Im Terminal)

    Code
    if [ `awk '$1 < 8' test.txt` ]; then mv `awk '{print $2}' test.txt` Ordner; else echo "Nichts gefunden!"; fi


    Führt zu:

    Code
    Nichts gefunden!


    Eine Änderung in der txt auf 6 statt 6.4 oder im Befehl von 8 auf 8.4 bringen das gleiche Ergebnis.
    Auch ein Leerzeichen nachdem : in der txt bringen das gleiche Ergebnis.
    Eine Erweiterung bringt ebenfalls das gleiche Ergebnis.
    Ein vertauschen der beiden $1 und $2 ebenfalls das gleiche Ergebnis.

    Code
    if [ `awk '$1 < /[8]+\.[8]+/ ' test.txt` ]; then mv `awk '{print $2}' test.txt` Ordner; else echo "Nichts gefunden!"; fi


    Funktioniert es bei dir @angelluck?
    Wie kann ich mir ausgeben lassen was der Befehl macht bzw. findet?
    Das -v (für verbose) gibt es ja nicht überall.

  • Nein funktioniert bei mir auch nicht.


    Um zu sehen, was die einzelnen Befehle tun, kannst du sie meines Wissens nach nur einzelnd ausführen.


    Das hasse ich so beim Programmieren, was soll immer dieses in der nähe von xy ist ein Fehler aufgetretten? Da ist man nur immer ewig am Suchen weil man nicht genau weiß was jetzt eigentlich gemeint ist.


    Ich glaube auch nicht, dass es an der Dezimaldarstellung liegt. Es wird ja immer noch irgendwas in der nähe der Klammern angemeckert. Viel eher wird es jetzt daran liegen, dass du ja nur in jeder zweiten Zeile tatsächlich eine Zahl stehen hast und das nicht allein.

    Code
    grep -Ew "rating|title" *.nfo | uniq | /bin/sed -e 's/<[^>]*>//g' > test.txtawk -F":" '{ print $2 }' test.txt


    Als Ausgabe bekommst du dann so etwas


    Code
    WallE28.4WallE35.4WallE6.4


    Geschickt wäre es wenn es so aussehen würde. Dann könnte man mit rating=`awk -F '{ print $2 }'` das ganze in einem Array abspeichern und wenn man in der Codezeile $2 durch $1 ersetzt würde man die zugehörigen Filmnamen bekommen, die man dann einfach verschieben könnte. Funktioniert bei mir aber nur wenn keine leerzeichen im Filmname enthalten ist, weil sonst jedes Wort einzelnd ins Array gelegt wird. Was eher schlecht wäre.


    Code
    WallE2 8.4
    WallE3 5.4
    WallE  6.4


    Wie sind denn deine Filmnamen formatiert? Gibt es welche mit Leerzeichen?

  • Ja, das ist mir klar. Liegt an diesem Teil in deinem sed-Befehl. Damit ersetzt du alle Leerzeichen durch kein Zeichen.
    -e 's/ //g'


    Wenn du den raus nimmst, hast du auch wieder leerzeichen in den Filmnamen. Die brauchst du dann auch, stonst funktioniert am ende der mv-Befehl nicht.


    Du könntest höchstens die Leerzeichen durch Bindestriche oder so ersetzten.
    Funktioniert z.b. so.
    -e 's/ /-/g'

  • Danke!


    Dann könnte ich die Dateien und Ordner mit _ vom Leerzeichen befreien.


    Dann per obrigen mv verschieben.


    Geht das überhaupt bei einzelnen Dateien diese verschieben und bei einem Treffer innerhalb eines Ordners dann den Ordner verschieben?


    Bspw. Wall_E.avi und Wall_E.avi im Ordner Wall_E.


    Danach wieder _ durch Leerzeichen ersetzen.

  • wird schon gehen wird ja nach dem Namen gesucht. Allerdings bin ich mir gerade nicht sicher ob auch in unterordnen gesucht wird.


    Liegen denn alle Filme bei dir in extra Ordnern?


    Aber wenn alle Filme bei dir in extra Ordnern liegen könntest du ja gleich nur den Ordner mit dem gesamten Inhalt verschieben.