Wie Ordnername (zwischen)sichern und kopierte Datei damit umbennen

Diskutiere das Thema Wie Ordnername (zwischen)sichern und kopierte Datei damit umbennen im Forum Mac OS - Unix & Terminal.

  1. Bozol

    Bozol Thread Starter Mitglied

    Beiträge:
    2.150
    Zustimmungen:
    274
    Mitglied seit:
    16.07.2003
    Hallo,

    ich habe das Problem den Ordnernamen irgendwie zwischen zu speichern und dann die kopierte Datei damit umzubenennen.

    Hier der Aufruf:

    cd film.eyetv; cp *.ts /Volumes/Scratch/Video_IN/

    Da der Dateiname der kopierten Datei nur aus Zahlen besteht möchte ich die Datei mit dem Ordnernamen, natürlich ohne .eyetv, umbenennen.

    Kann mir jemand dabei helfen?

    Dankeschön,

    Fred
     
  2. oneOeight

    oneOeight Mitglied

    Beiträge:
    52.297
    Zustimmungen:
    5.728
    Mitglied seit:
    23.11.2004
  3. Bozol

    Bozol Thread Starter Mitglied

    Beiträge:
    2.150
    Zustimmungen:
    274
    Mitglied seit:
    16.07.2003
    Danke. Ich habs probiert, aber es kommt nicht das raus was ich anstrebe.

    Vielleicht habe ich mich ungeschickt aus gedrückt...

    Da Du ja m. W. selbst EyeTV nutzt weißt Du ja das eine "Aufnahme.eyetv"-Datei nur eine Art Ordner ist in welchem u. A. die Videodatei mit drin ist.
    Diese Datei zu kopieren klappt ja, mir gehts nur darum die Videodatei, welche ja in meinem Fall nur eine Zahlenreihe.ts als Dateinamen hat, mit dem Namen des "Umschlags", also in "Aufnahme.ts" umzubenennen.

    Das mit der Schleife war ein guter Tip, kann ich somit mehrere Aufnahmen auf einen Schlag verarbeiten, aber wenn ich drei, vier Aufnahmen gleichzeitig im Zielordner habe weiß ich ja mehr hinter welcher Videodatei sich welcher Aufnahmetitel verbirgt.

    Ich hoffe ich konnte es ein bisschen verständlicher herüber bringen.

    Fred
     
  4. mj

    mj Mitglied

    Beiträge:
    8.239
    Zustimmungen:
    2.961
    Mitglied seit:
    19.11.2002
    @oneOeight liegt absolut richtig, die for-Schleife ist dein Freund. Der Trick ist es die Datei erst umzubenennen und anschließend zu verschieben:

    for i in $(ls *.eyetv/*.ts); do folder=$(echo ${i} | cut -d'/' -f1); mv ${i} ${folder}/${folder}.ts; mv ${folder}/${folder}.ts ${zielverzeichnis}; done
     
  5. Bozol

    Bozol Thread Starter Mitglied

    Beiträge:
    2.150
    Zustimmungen:
    274
    Mitglied seit:
    16.07.2003
    Vielen Dank, @mj!

    Das hätte ich so nie hinbekommen.

    Und auch Dir, @oneOeight, vielen Dank.
     
  6. lisanet

    lisanet Mitglied

    Beiträge:
    1.212
    Zustimmungen:
    656
    Mitglied seit:
    05.12.2006
    Hmm, klar kann man das auch mit Schleifen oder vielen Variablen machen, hier aber mal eine ganz pragmatische Lösung ;)

    Da du ja folgendes bislang eintippst

    dann mach einfach folgendes:

    Code:
    cd film.eyetv; cp *.ts /Volumes/Scratch/Video_IN/film.ts
    oder kürzer und zusammengefasst:

    Code:
    cp film.eyetv/*.ts /Volumes/Scratch/Video_IN/film.ts
    Es ist ja eh nur eine *.ts Datei in einem *eyetv-Ordner

    :D
     
  7. oneOeight

    oneOeight Mitglied

    Beiträge:
    52.297
    Zustimmungen:
    5.728
    Mitglied seit:
    23.11.2004
    er kann das mit den schleifen und variablen nicht sparen, er will es ja automatisiert für alle .eyetv und muss dann den ordner namen raus schneiden für das umbenennen.

    man müsste auch bei der lösung aus #4 das umbenennen sparen können und einfach beim kopieren den namen bei der ziel date zusammen bauen, außerdem geben da dateinamen mit leerzeichen ein problem.

    hier das sollte besser laufen:
    Code:
    find . -name \*.ts -print0 | while read -d $'\0' file; do folder=$(basename "`dirname "$file" | sed 's,^\(.*/\)\?\([^/]*\),\2,'`"|cut -d'.' -f1); cp "$file" /Volumes/Scratch/Video_IN/"$folder".ts; done
    geht bestimmt schöner und einfacher, aber funktioniert.
     
  8. lisanet

    lisanet Mitglied

    Beiträge:
    1.212
    Zustimmungen:
    656
    Mitglied seit:
    05.12.2006
    ok, dann mit Schleife und ganz ohne read, sed und cut

    Code:
    for i in *.eyetv; do   cp "$i/*.ts" /Volumes/Scratch/Video_IN/"$(basename $i .eyetv).ts";   done
    ;)
     
  9. oneOeight

    oneOeight Mitglied

    Beiträge:
    52.297
    Zustimmungen:
    5.728
    Mitglied seit:
    23.11.2004
    geht auch, da hat man aber das .eyetv dann noch im datei namen drin (und zwar doppelt) und du solltest vielleicht das $i bei basename in " " setzen wegen leerzeichen im dateinamen.
     
  10. Bozol

    Bozol Thread Starter Mitglied

    Beiträge:
    2.150
    Zustimmungen:
    274
    Mitglied seit:
    16.07.2003
    Auch Dir, lisanet, ein Dankeschön für Deine Mithilfe.
     
  11. lisanet

    lisanet Mitglied

    Beiträge:
    1.212
    Zustimmungen:
    656
    Mitglied seit:
    05.12.2006
    oops, stimmt. Anführungszeichen um das zweite $i fehlen. Dann gibst auch keine zweimal .eyetv im Dateinamen
     
Die Seite wird geladen...
  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite weitersurfst, akzeptierst du unseren Einsatz von Cookies. Akzeptieren Weitere Informationen...