[yaVDR 0.7] Kopieren von manchen Ordnern auf USB-Disk nur mit "mc" möglich

  • Ich verwende yaVDR 0.7 mit vdr-2.4.7-patch (Wegen menuselection-Patch) und mein Skript um Aufnahmen auf eine externe USB-Platte zu kopieren, da ich oft welche mitnehme...


    Beim kopieren mit dem Skript klappt es manchmal nicht und ich bekomme sowohl mit cp als auch mit rsync eine Fehlermeldung.


    Code
    Mai 17 11:12:19 vdr01 yaVDR_7183_1609[7189]: /_config/bin/copy2usb.sh <START>
    Mai 17 11:12:19 vdr01 yaVDR_7183_1609[7191]: /_config/bin/copy2usb.sh Kopiere /video/Home_Economics/Drei_Kugeln_Eis_$_6,39__>
    Mai 17 11:12:19 vdr01 yaVDR_7183_1609[7194]: /_config/bin/copy2usb.sh <END>
    ...
    Mai 17 11:12:25 vdr01 vdr[1609]: [1609] info: FEHLER beim kopieren von 'Home Economics / Drei Kugeln Eis $ 6,39  (S01E04)'


    Das Skript:


    Wenn ich die Aufnahme aber im Terminal mit mc kopiere, klappt es!


    Was kann das sein? Liegt es am Benutzer vdr? Weil mit sudo mc kann ich es ja kopieren...

  • Welches Dateisystem hat der USB Stick?

  • Ohne genau in das Skript geschaut zu haben eine Vermutung, ob vielleicht das "$"-Zeichen im Titel "Drei Kugeln Eis $" von der bash interpretiert wird?

  • Das ist ne Seagate Expansion+ im exfat-Format.




    Code
    root@vdr01:~# mount |grep Seagate
    /dev/sdc1 on /media/vdr/Seagate type exfat (rw,nosuid,nodev,relatime,uid=666,gid=666,fmask=0022,dmask=0022,iocharset=utf8,namecase=0,errors=remount-ro,uhelper=udisks2)
  • Das temporäre Skript, das eigentlich kopiert sieht so aus:


    Bash
    #!/bin/bash
    mkdir --parents "/media/vdr/Seagate/video/Home_Economics/Drei_Kugeln_Eis_$_6,39__(S01E04)"
    svdrpsend MESG "Kopiere 'Home Economics / Drei Kugeln Eis $ 6,39  (S01E04)' nach [Seagate]/video/"
    if rsync --archive --bwlimit=25600 "/video/Home_Economics/Drei_Kugeln_Eis_$_6,39__(S01E04)/2022-05-03.20.33.23-0.rec" "/media/vdr/Seagate/video/Home_Economics/Drei_Kugeln_Eis_$_6,39__(S01E04)" ; then
      svdrpsend MESG "'Home Economics / Drei Kugeln Eis $ 6,39  (S01E04)' wurde nach [Seagate]/video/ kopiert"
    else
      svdrpsend MESG "FEHLER beim kopieren von 'Home Economics / Drei Kugeln Eis $ 6,39  (S01E04)'"
    fi
    touch /video/.update
  • Ohne genau in das Skript geschaut zu haben eine Vermutung, ob vielleicht das "$"-Zeichen im Titel "Drei Kugeln Eis $" von der bash interpretiert wird?

    Ah, das schau ich mir mal an...

  • Das temporäre Skript, das eigentlich kopiert sieht so aus:

    Wenn du da keine Shell-Expansionen mehr in den Strings machen willt, quote die mit einfachen Anführungszeichen, um potentielle Probleme zu vermeiden - $_ ist ja eine Variable in der bash.

    Code
    $ echo "/video/Home_Economics/Drei_Kugeln_Eis_$_6,39__(S01E04)/2022-05-03.20.33.23-0.rec"
    /video/Home_Economics/Drei_Kugeln_Eis_,39__(S01E04)/2022-05-03.20.33.23-0.rec
    $ echo '/video/Home_Economics/Drei_Kugeln_Eis_$_6,39__(S01E04)/2022-05-03.20.33.23-0.rec'
    /video/Home_Economics/Drei_Kugeln_Eis_$_6,39__(S01E04)/2022-05-03.20.33.23-0.rec

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Stimmt schon. Aber wenn dann ein ' im Namen ist (gar nicht so selten), dann hängt es wieder.


    Ich mache jetzt im Skript Änderungen und escape die Sonderzeichen ($ \ ! `)...

  • Habe es erst mal so gelöst:

    Das erzeugte Kopierskript sieht dann so aus:

    Bash
    #!/bin/bash
    mkdir --parents "/media/vdr/Seagate/video/Home_Economics/Der_Triangle-Shirtwaist-Brand_(gebraucht)_\$_11__(S01E06)"
    svdrpsend MESG "Kopiere 'Home Economics / Der Triangle-Shirtwaist-Brand (gebraucht) $ 11  (S01E06)' nach [Seagate]/video/"
    if rsync --archive --bwlimit=25600 "/video/Home_Economics/Der_Triangle-Shirtwaist-Brand_(gebraucht)_\$_11__(S01E06)/2022-05-10.20.28.23-0.rec" "/media/vdr/Seagate/video/Home_Economics/Der_Triangle-Shirtwaist-Brand_(gebraucht)_\$_11__(S01E06)" ; then
      svdrpsend MESG "'Home Economics / Der Triangle-Shirtwaist-Brand (gebraucht) $ 11  (S01E06)' wurde nach [Seagate]/video/ kopiert"
    else
      svdrpsend MESG "FEHLER beim kopieren von 'Home Economics / Der Triangle-Shirtwaist-Brand (gebraucht) $ 11  (S01E06)'"
    fi
    touch /video/.update
  • Na ja, solche Dateinamen fallen dir als nächstes auf die Füße, wenn du die Platte auch mal unter WIN32 nutzen willst.

  • Das ist kein Problem. Windoof hab ich nirgends im Einsatz. Nur noch in der VBox, falls mal die Steuer ansteht oder so.


    Ich dachte eigentlich, dass der VDR die problematischen Zeichen codiert... Beim : zum Beispiel klapp das...

  • Ich dachte eigentlich, dass der VDR die problematischen Zeichen codiert... Beim : zum Beispiel klapp das...

    Das hängt davon ab, wie man --dirname setzt, vgl. Manpage

    Code
    --dirnames=path[,name[,enc]]
                  Set the maximum directory path length to path (default is the maximum value allowed
                  on the system). If name is also given, it defines the maximum directory name length
                  (default is the maximum value allowed on the system).  The optional enc can be 0 or
                  1, and controls whether special characters in directory names are  encoded  as  hex
                  values (default: 0).  If path or name are left empty (as in ",,1" to only set enc),
                  the defaults apply.  The length of the video directory name and that of the  actual
                  recording  directory  is subtracted from path, to make sure the directory path will
                  never become too long.

    Aber da $ (mit Einschränkungen) in Windows-Dateinamen erlaubt ist, scheint das nicht speziell behandelt zu werden: http://git.tvdr.de/?p=vdr.git;…619c752a9d21;hb=HEAD#l591 ff.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

    Einmal editiert, zuletzt von seahawk1986 ()

  • Hab ich eigentlich

    EDIT:

    Der VDR übersetzt wohl nur diese:

    Code
    const char *InvalidChars = "\"\\/:*?|<>#";

Jetzt mitmachen!

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