[Erledigt] per shell namen kürzen ?

  • Hi,


    Hab hier Files mit folgendem Muster;


    Datum Zeit - Sender - Film.trp


    wie kann ich die in nem Script nur mit der shell zu;


    Film.ts


    kürzen (muss also immer alles von links weg bis zum zweiten Bindestrich (incl. dem Bindestrich und dem nachfolgenden Leerzeichen) wegschneiden.
    Gleichzeitig sollte in dem verbleibenden Namen falls noch Leerzeichen vorhanden diese durch Unterstriche erstetzt werden.


    Oder wärs besser zuerst ( vor dem Kürzen) alle Leerzeichen durch Unterstriche zu ersetzen (denn Leerzeichen sind da erstmal immer dabei)
    Am Besten in ner for Schleife.


    Gruss
    Bert

    Hardware: Intel Core i9-9900K, ASUS ROG Maximus XI Hero, MSI GeForce GTX 1050 Ti (vdpau), Dvbsky S952 V3 mit 2X DVB-S2 Tuner
    Multibootsystem (yavdr-ansible auf Ubuntu-20.04, Kubuntu-20.04 Focal Fossa, Win10)
    yavdr-ansible, Ausgabe über Nvidia vdpau

    Einmal editiert, zuletzt von Bert ()

  • for old in *.tpl; do
    new=$(echo "$old"|sed 's/^.*- //' | sed -e 's/.tpl$/.ts/' -e 's/ /_/g')
    mv "$old" "$new"
    done


    untestet

  • Wie wäre es mit http://wiki.ubuntuusers.de/rename? Da musst du dir nur noch einen passenden Regex-Ausdruck basteln...
    Zum Testen könntest du mal so anfangen (-n verhindert das wirkliche Umbenennen und dient nur als Probelauf)

    Code
    rename -n 's/.*\ -\ .*\ -\ //;s/\.trp/\.ts/;s/\ /_/g' *.trp

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Hi,


    Danke Jungs, aber ich will ja kein sed oder ähnliches verwenden.
    Habs aber selbst rausgefunden;


    EDIT !
    Das Script sieht jetzt so aus -> war noch nicht komplett gestern.


    Bash
    #!/bin/sh 
    cd /aufnahmedir
    for j in *; do
    		NAME=${j//*-*- }
    		mv "${j}" "${NAME// /_}"
    		FILM_NAME=${NAME// /_}
    		echo "Filmtitel = ${FILM_NAME}"
    done


    So wollt ich das.


    Gruss
    Bert

    Hardware: Intel Core i9-9900K, ASUS ROG Maximus XI Hero, MSI GeForce GTX 1050 Ti (vdpau), Dvbsky S952 V3 mit 2X DVB-S2 Tuner
    Multibootsystem (yavdr-ansible auf Ubuntu-20.04, Kubuntu-20.04 Focal Fossa, Win10)
    yavdr-ansible, Ausgabe über Nvidia vdpau

    Einmal editiert, zuletzt von Bert ()

  • Zwar offtopic, aber was ich mich schon immer frage: Wer denkt sich sowas aus?


    s/.*\ -\ .*\ -\ //;s/\.trp/\.ts/;s/\ /_/g :

    - Client1: Thermaltake DH 102 mit 7" TouchTFT * Debian Stretch/vdr-2.4.0/graphtft/MainMenuHooks-Patch * Zotac H55-ITX WiFi * Core i3 540 * 4GB RAM ** Zotac GT630 * 1 TB System HDD * 4 GB RAM * Harmony 900 * satip-Plugin

    - Client2: Alfawise H96 Pro Plus * KODI
    - Server: Intel Pentium G3220 * DH87RL * 16GB RAM * 4x4TB 3.5" WD RED + 1x500GB 2.5" * satip-Plugin
    - SAT>IP: Inverto iLNB

  • Ich habe einen Anhaltspunkt, er trägt dieses T-Shirt.


    Gruß Dirch

    Mutterbrett: Foxconn g31mx mit Core2Duo E2200, 2GB / 1TB Hitachi / 240er GT weil 9500er gehimmelt / X10 / FF1.3 & Pinnacle PCTV Sat HDTV Pro USB / TV nur noch unter yaVDR und mit The Beast natürlich


    Dieser Beitrag wird 81 mal editiert, zum nächsten Mal von Dirch: Morgen, so um 20:39 :whistling:

  • Ich habe einen Anhaltspunkt, er trägt dieses T-Shirt.


    Garantiert nicht.
    Wenn du einen besseren Vorschlag hast, das in einem Einzeiler bei den Angaben zur Namensgebung von Bert zu erledigen (Seine Lösung würde z.B. über ein "-" im Sendername wie bei n-tv stolpern), lerne ich gerne dazu.

    Zwar offtopic, aber was ich mich schon immer frage: Wer denkt sich sowas aus?


    Ich, wenn ich etwas müde Regex-Ausdrücke bastle... (wenn du willst, erkläre ich es dir)


    Btw: die Lösung von uetzger verzichtet auf das escapen von einigen Zeichen (wie z.B. der Punkt bei der Ersetzung der Dateinamen) - ich dachte immer sed würde darauf bestehen ?(

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • :heuldoch :heuldoch


    Dagegen ist doch Japanische Kalligrafie ein Kinderspiel.


    Was solls, wenn es klappt wird es schon seine Berechtigung haben.


    :streichel Dirch

    Mutterbrett: Foxconn g31mx mit Core2Duo E2200, 2GB / 1TB Hitachi / 240er GT weil 9500er gehimmelt / X10 / FF1.3 & Pinnacle PCTV Sat HDTV Pro USB / TV nur noch unter yaVDR und mit The Beast natürlich


    Dieser Beitrag wird 81 mal editiert, zum nächsten Mal von Dirch: Morgen, so um 20:39 :whistling:

  • Hi all.
    Ich danke Euch natürlich allen hier für eure Lösungsvorschläge -> kann man ja immer wieder mal irgendwann gebrauchen :]


    seahawk1986


    Zitat

    Wenn du einen besseren Vorschlag hast, das in einem Einzeiler bei den
    Angaben zur Namensgebung von Bert zu erledigen (Seine Lösung würde z.B.
    über ein "-" im Sendername wie bei n-tv stolpern), lerne ich gerne dazu.

    Danke für den Tipp, muss zugeben das hab ich noch nicht mal bedacht,
    aber habs grade getestet und funktioniert auch bei n-tv korrekt.
    Die Files haben ja zwischen den Bindestrichen immer auch noch ein Leerzeichen bei n-tv aber nicht.
    Wers probieren will;
    Einfach ein txt file z.b in:

    Zitat

    20110503 1555 - n-tv - Cop Out - Geladen und Entsichert.trp


    umbenennen und das Script drauf loslassen.


    EDIT !
    Also das kapier ich jetzt auch nicht das klappt sogar wenn ich das File in;


    Zitat

    20110503 1555 - n - tv - Cop Out - Geladen und Entsichert.trp

    umbenenne -> wieso ?



    Gruss Bert

    Hardware: Intel Core i9-9900K, ASUS ROG Maximus XI Hero, MSI GeForce GTX 1050 Ti (vdpau), Dvbsky S952 V3 mit 2X DVB-S2 Tuner
    Multibootsystem (yavdr-ansible auf Ubuntu-20.04, Kubuntu-20.04 Focal Fossa, Win10)
    yavdr-ansible, Ausgabe über Nvidia vdpau

    2 Mal editiert, zuletzt von Bert ()

  • Die Files haben ja zwischen den Bindestrichen immer auch noch ein Leerzeichen bei n-tv aber nicht.


    Jetzt habe ich das ensprechende Leerzeichen in deinem Skript auch gesehen :unsch Ich nehme alles zurück und behaupte das Gegenteil.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Hi,


    Hm, schwieriger als ich dachte -> an was sollte ich mich jetzt orientieren ?


    Gruss
    Bert

    Hardware: Intel Core i9-9900K, ASUS ROG Maximus XI Hero, MSI GeForce GTX 1050 Ti (vdpau), Dvbsky S952 V3 mit 2X DVB-S2 Tuner
    Multibootsystem (yavdr-ansible auf Ubuntu-20.04, Kubuntu-20.04 Focal Fossa, Win10)
    yavdr-ansible, Ausgabe über Nvidia vdpau

  • Ich habe das Skript mal probiert und bekomme eine Fehlermeldung "Bad substitution" und zwar beim ersten Film = Verzeichnis = %Bloodrayne.


    Da es dort nix zum entfernen gibt schein das Skript zu scheitern.

    Gruß
    Frodo

  • Das Skript kann ja schlecht wissen, wieviele Bindestriche zum Sendernamen gehören. Da hast du keine Chance, es sei denn, du speicherst z.B. alle Sendernamen mit Bindestrich im Skript und suchst dann gezielt im Dateinamen danach. Dafür verwendet man aber besser eine vernünftige Skriptsprache, z.B. Perl, Python oder Ruby.

    HFX mini, i3-4330, Asrock H97M, 2 x 2 GB DDR3-1600, OCZ Vertex 32GB, 2 x WDC Caviar Green 2 TB, Pioneer DVR-K06, Terratec Cinergy 1200 DVB-C, TechnoTrend C-1500, YARD mini USB mit OLED, Pulse-Eight USB - HDMI-CEC, Debian Jessie, Kodi

  • Hi,


    Zitat

    Das Skript kann ja schlecht wissen, wieviele Bindestriche zum Sendernamen gehören.

    Ja ist klar aber es ist doch so das die Files in folgendem Muster vorliegen:


    Datum Zeit - Sender - Film.trp


    und wenn der Sender wie z.b: n-tv eben nen Bindestrich dabei hat so ist der
    nicht links und rechts von nem Leerzeichen umgeben.
    Würde dann so aussehen;


    Datum Zeit - n-tv - Film.trp


    Ich müsste also immer alles vom Anfang weg bis zum (incl.) zweiten Bindestrich gefolgt von nem Leerzeichen wegkürzen
    wär das nix als Orientierung -> müsste doch irgendwie funktionieren.


    Gruss
    Bert

    Hardware: Intel Core i9-9900K, ASUS ROG Maximus XI Hero, MSI GeForce GTX 1050 Ti (vdpau), Dvbsky S952 V3 mit 2X DVB-S2 Tuner
    Multibootsystem (yavdr-ansible auf Ubuntu-20.04, Kubuntu-20.04 Focal Fossa, Win10)
    yavdr-ansible, Ausgabe über Nvidia vdpau

  • Schau dir mal die Sender an - man kann dann sicherlich so matchen, dass diese immer sauber erkannt werden.
    Also deinen Beispieleintrag kann ich so in das gewünschte Format bringen:

    Code
    rename -n 's/\b[0-9]{8}\b\s\b[0-9]{4}\b\s-\s(\b[A-Z|a-z|0-9|-]*\b\s){0,6}//;s/^\s*-\s//;s/\s/_/g;s/\.trp/\.ts/' *.trp


    Mit diesen Dateien habe ich es mal getestet:

    Code
    ich@VDR:~/regex$ rename -n 's/\b[0-9]{8}\b\s\b[0-9]{4}\b\s-\s(\b[A-Z|a-z|0-9|-]*\b\s){0,6}//;s/^\s*-\s//;s/\s/_/g;s/\.trp/\.ts/' *.trp
    20110503 1555 - Das Erste HD - Cop Out - Geladen und Entsichert.trp renamed as Cop_Out_-_Geladen_und_Entsichert.ts
    20110503 1555 - n-tv - Cop Out - Geladen und Entsichert.trp renamed as Cop_Out_-_Geladen_und_Entsichert.ts


    Ist zwar kleinschrittiger ung irgendwie noch nicht optimal, aber es funktioniert :D

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Hi seahawk1986,


    Code
    rename -n 's/\b[0-9]{8}\b\s\b[0-9]{4}\b\s-\s(\b[A-Z|a-z|0-9|-]*\b\s){0,6}//;s/^\s*-\s//;s/\s/_/g;s/\.trp/\.ts/' *.trp


    Danke, ja das funktioniert :]


    Gruss
    Bert

    Hardware: Intel Core i9-9900K, ASUS ROG Maximus XI Hero, MSI GeForce GTX 1050 Ti (vdpau), Dvbsky S952 V3 mit 2X DVB-S2 Tuner
    Multibootsystem (yavdr-ansible auf Ubuntu-20.04, Kubuntu-20.04 Focal Fossa, Win10)
    yavdr-ansible, Ausgabe über Nvidia vdpau

  • Hi,


    So hab trotz der Lösung von seahawk1986 das Ganze ein bisschen weiterverfolgt.
    Das Script sieht nun so aus;


    Bash
    #!/bin/sh 
    cd /aufnahmedir
    for j in *; do
    		NAME=${j#*-*- }
    		mv "${j}" "${NAME// /_}"
    		FILM_NAME=${NAME// /_}
    		echo "Filmtitel = ${FILM_NAME}"
    done


    Hab das nun ein paar mal getestet und das scheint auch zu funktionieren.
    Hab z.b: ein TextFile in;


    22222222222222222222222225555555555 - n-tv - Cop Out - Geladen und Entsichert.trp


    umbenannt und raus kommt dabei dann das;


    Cop_Out_-_Geladen_und_Entsichert.trp


    Wenn das jetzt immer so klappt wär ich zufrieden.


    EDIT !
    Die ganze Umbenennungsprozedur sieht jetzt so aus;


    und bislang funktioniert das tadellos.


    Und nochmal Danke an Alle hier für Eure Vorschläge dazu -> kann ich bestimmt mal brauchen :]


    Gruss
    Bert

    Hardware: Intel Core i9-9900K, ASUS ROG Maximus XI Hero, MSI GeForce GTX 1050 Ti (vdpau), Dvbsky S952 V3 mit 2X DVB-S2 Tuner
    Multibootsystem (yavdr-ansible auf Ubuntu-20.04, Kubuntu-20.04 Focal Fossa, Win10)
    yavdr-ansible, Ausgabe über Nvidia vdpau

    3 Mal editiert, zuletzt von Bert ()

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!