Scriptproblem mit Leerstellen

Status
Für weitere Antworten geschlossen.

toller

Benutzer
Mitglied seit
06. Feb 2014
Beiträge
183
Punkte für Reaktionen
13
Punkte
18
Hallo,
habe ein Problem bei folgendem Script. Ich würde gerne den vollständigen Dateinamen - mit Leerstellen - aus der Quelldatei in die Zieldatei übernehmen.

cd /volume2/Downloadstation/s/
for I in *.ts; do ffmpeg -i $I -vcodec copy -acodec copy `echo $I | sed 's/.ts/.mp4/g'`; done​

Das Ganze funktioniert aber nur mit Dateien ohne Leerstellen.

Hat jemand einen Tipp?
 
Schreib mal die beiden $I in doppelte Hochkomma ("$I")
 
Danke dir für den Tipp. Jetzt ist aber meine DS schlagartig und ohne Vorwarnung abgeraucht und habe deshalb anderes zu tun... Versuche das mit dem Script später mal.
 
OK, habs probiert: Hat nix gebracht :(
 
Mmh, ich könnte mir vorstellen, dass da der hintere Teil die Probleme macht. Probier mal statt
Code:
for I in *.ts; do ffmpeg -i $I -vcodec copy -acodec copy `echo $I | sed 's/.ts/.mp4/g'`; done
Code:
for I in *.ts; do
  newname=`echo "$I" | sed 's/.ts/.mp4/g'`
  ffmpeg -i "$I" -vcodec copy -acodec copy "$newname" 
done
oder
Code:
for I in *.ts; do
  oldname="$I"
  newname=`echo "$oldname" | sed 's/.ts/.mp4/g'`
  ffmpeg -i "$oldname" -vcodec copy -acodec copy "$newname" 
done
Ansonsten spiel einfach mal ein wenig rum. Man muss nicht immer gleich alles in einer Zeile machen wollen. Das erleichtert die Fehlersuche. Etwas zusammenfassen kannst du hinterher immer noch.

PS: Nicht getestet - einfach nur so aus dem Kopf hingeschrieben. Ich kenne nicht mal ffmpeg.
 
Zuletzt bearbeitet:
Nachdem ich meine DS wieder komplett neu aufsetzen musste, habe ich jetzt eine Lösung gefunden:

Es sollen bei rund 200 von 2000 Filmen
zuerst die Leerzeichen in "_" umgeschrieben,
dann von .ts ins .mp4 Format transkodiert,
wieder die Leerzeichen zurückgesetzt und
schließlich in einen Ordner verschoben werden.

Damit klappt das jetzt ganz gut:

cd /volume2/Downloadstation/ts/
for file in *' '*.ts; do
mv "$file" "$(echo $file | sed -e 's/ /_/g')";
done ;
for I in *.ts; do
ffmpeg -y -i $I -c:v copy `echo $I | sed 's/.ts/.mp4/g'`;
done ;
mv *.mp4 /volume2/Downloadstation/ts/mp4/ ;
cd /volume2/Downloadstation/ts/mp4/
for file in *'_'*; do
mv "$file" "$(echo $file | sed -e 's/_/ /g')"; done ;


Pro ca. 4gb Film braucht die 716+II ungefähr 10-15 Minuten.

Grüßle


EDIT:
Der Einzug klappt hier micht so wirklich. Im DS Aufgabenplaner habe ich das Script sowieso komplett ohne Einzüge - sieht ja keiner :_)

EDIT 2:
Einen kleinen Fehler gibt es noch: Es werden alle .ts in mp4 umgeschrieben. Das heißt, dass auch beispielsweise das Wort "nichts" zu "nicmp4" wird.
Damit könnte ich aber leben, weil es sich um sehr wenig Dateien handelt.
 
Zuletzt bearbeitet:
Versuche bitte einmal den Extension-Punkt zu escapen - also \.ts statt .ts.
 
Genau das war es - Alles läuft jetzt perfekt. Inzwischen ist alles vollautomatisch und im Hintergrund umgewandelt und wieder abgelegt.

Danke @Benares und @dil88 für eure Hilfe!

CU
 
dil88 nur mal so, wäre es nicht besser er würde es mit $ als Ende setzen?
Theoretisch würde sonst ja nicht direkt die Endung genutzt und er müsste auch nicht global nutzen.
 
Klar, \.ts$ wäre noch besser.
 
Na dann habe ich doch was gelernt in der letzten Zeit :)
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat