Mediensammlung entrümpeln

  • 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.
  • 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!

    Quellcode

    1. 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.

    Dieser Beitrag wurde bereits 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.

    Quellcode

    1. 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 wiki.ubuntuusers.de/awk/ stimmen sollte.

    Quellcode

    1. bash: Syntaxfehler beim unerwarteten Wort `{'
    Sieht nach den vor mv aus.
    Wenn man die ändert, dann schreibt er

    Quellcode

    1. bash: Syntaxfehler beim unerwarteten Wort `('

    Dieser Beitrag wurde bereits 1 mal 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.:

    Quellcode

    1. Wall E.nfo: Wall E
    2. Wall 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.

    Quellcode

    1. -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:

    Quellcode

    1. Wall E
    2. 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:

    Quellcode

    1. if [ `awk '$1 < 8' /pfad/zur/datei/datei` ]
    2. then
    3. mv `awk '{print $2}' /pfad/zur/datei/datei` /pfad/zum/ordner
    4. else
    5. echo "Nichts gefunden!"
    6. fi

    Hierbei erhalte ich leider:


    Quellcode

    1. bash: [: 5: Einstelliger (unärer) Operator erwartet.
    2. Nichts gefunden!
    Wo steckt nun der vermutlich Detail Fehler?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Revan335 ()

  • Neu

    Erst dies: (Im Terminal)

    Quellcode

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



    Ergibt bspw. dies:

    Quellcode

    1. WallE2.nfo:WallE2
    2. WallE2.nfo:8.4
    3. WallE3.nfo:WallE3
    4. WallE3.nfo:5.4
    5. WallE.nfo:WallE
    6. WallE.nfo:6.4


    Dann dies: (Im Terminal)

    Quellcode

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

    Führt zu:

    Quellcode

    1. 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.

    Quellcode

    1. 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.
  • Neu

    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.

    Quellcode

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

    Als Ausgabe bekommst du dann so etwas

    Quellcode

    1. WallE2
    2. 8.4
    3. WallE3
    4. 5.4
    5. WallE
    6. 6.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.

    Quellcode

    1. WallE2 8.4
    2. WallE3 5.4
    3. WallE 6.4


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

    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'
  • Neu

    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.