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. Hallo, ich habe das Problem den Ordnernamen irgendwie zwischen zu speichern...

Bozol

Bozol

Mitglied
Thread Starter
Mitglied seit
16.07.2003
Beiträge
2.308
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
 
Bozol

Bozol

Mitglied
Thread Starter
Mitglied seit
16.07.2003
Beiträge
2.308
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
 
mj

mj

Mitglied
Mitglied seit
19.11.2002
Beiträge
8.477
@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
Bozol

Bozol

Mitglied
Thread Starter
Mitglied seit
16.07.2003
Beiträge
2.308
Vielen Dank, @mj!

Das hätte ich so nie hinbekommen.

Und auch Dir, @oneOeight, vielen Dank.
 
lisanet

lisanet

Mitglied
Mitglied seit
05.12.2006
Beiträge
1.773
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
oneOeight

oneOeight

Mitglied
Mitglied seit
23.11.2004
Beiträge
54.159
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.
 
lisanet

lisanet

Mitglied
Mitglied seit
05.12.2006
Beiträge
1.773
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
;)
 
oneOeight

oneOeight

Mitglied
Mitglied seit
23.11.2004
Beiträge
54.159
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
Bozol

Bozol

Mitglied
Thread Starter
Mitglied seit
16.07.2003
Beiträge
2.308
Auch Dir, lisanet, ein Dankeschön für Deine Mithilfe.
 
lisanet

lisanet

Mitglied
Mitglied seit
05.12.2006
Beiträge
1.773
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
 
Oben