Wie Ordnername (zwischen)sichern und kopierte Datei damit umbennen

Bozol

Bozol

Aktives Mitglied
Thread Starter
Dabei seit
16.07.2003
Beiträge
3.478
Reaktionspunkte
2.181
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
 
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
 
@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
 
  • Gefällt mir
Reaktionen: mausfang und Bozol
Vielen Dank, @mj!

Das hätte ich so nie hinbekommen.

Und auch Dir, @oneOeight, vielen Dank.
 
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

Hier der Aufruf:

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

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
 
  • Gefällt mir
Reaktionen: Bozol
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.
 
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

;)
 
ok, dann mit Schleife und ganz ohne read, sed und cut

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.
 
  • Gefällt mir
Reaktionen: lisanet
Auch Dir, lisanet, ein Dankeschön für Deine Mithilfe.
 
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.
oops, stimmt. Anführungszeichen um das zweite $i fehlen. Dann gibst auch keine zweimal .eyetv im Dateinamen
 
Zurück
Oben Unten