[Ubuntu] Mehrere Befehle nacheinander ausführen lassen

Ok, das Problem hat mir keine Ruhe gelassen, also hab ich noch weiter gebastelt (du Glückspilz :p)
Es gibt zwei Probleme, ein einfaches, nämlich das cd. Die Schleife gibt keine absoluten Pfade, sondern nur relative Pfade an. Nach dem cd passen die dann natürlich nicht mehr. Du kannst also entweder den alten cwd speichern und daraus in jedem Schleifendurchlauf den absoluten Pfad bauen oder du übergibst wput einfach die gleichen relativen Pfade wie Handbrake.

Das zweite Problem war komplizierter. "find" schreibt die Dateipfade in pipe und "while read" liest davon die einzelnen Dateinamen. Das Problem ist nun, dass Handbrake auch aus der pipe liest. Nach dem Handbrake Aufruf ist die pipe dann leer und die Schleife endet. Das kann man beheben, indem man Handbrake eine eigene leere pipe zum lesen gibt.

Code:
echo "" | HandbrakeCLI ...

Während meiner Bastelei habe ich beide Scripten auch mal zusammengeführt zu einem und ein paar "Verschönerungen" dazugepackt, vielleicht magst du das ja lieber.

Ich hoffe das Problem ist damit gelöst.

Code:
#!/bin/bash

src_dir="$1"
prefix="$2"
dst_dir="/media/freigaben/uploads"

find "$src_dir" -name "${prefix}*" -print0 | while read -d $'\0' f
do
    base_name="$(basename "$f")" && base_name="${base_name%.*}"
    echo "" | HandBrakeCLI -i "$f" -o "${dst_dir}/${base_name}.mp4"
    7z a -mx=9 -v100m "${dst_dir}/4ftp/${base_name}.7z" "${dst_dir}/${base_name}.mp4"
    wput -nd "${dst_dir}/4ftp/${base_name}.7z*" ftp://domain.com
done
 
Zuletzt bearbeitet:
Limit schrieb:
Das Problem ist nun, dass Handbrake auch aus der pipe liest. Nach dem Handbrake Aufruf ist die pipe dann leer und die Schleife endet.

Sehr kurios.
 
Jo, mit bash kann man immer wieder solche Seltsamkeiten erleben. Darum schreibe ich für gewöhnlich komplexere Scripts lieber mit Python oder einer anderen "ausgewachsenen" Scriptsprache.
 
Vielen lieben Dank Limit! :daumen:

Das Skript ist jetzt genial und funktioniert ... fast ;)
Ich musste noch etwas kleines ändern, in Zeile 12:
Code:
cd "${dst_dir}"
wput -nd "4ftp/${base_name}.7z"* ftp://domain.com
Ich kann das Verzeichnis nicht mit wput wechseln, es kommt dann immer ein Fehler. Und der wildcard Punkt muss hinter den Anführungszeichen stehen, sonst sucht der eine Datei mit Punkt.

Vielen vielen Dank auch, dass erspart mir viel Arbeit, denn so ist das jetzt super einfach :D
 
Zurück
Oben