Hallo,
ich habe hier verschiedene Script für die Audiokonvertierung von einem Format in ein anderes. Alle laufen nach dem gleichen Prinzip. Für die ausgewählte(n) Datei(en) wird (je nach verwendetem Encoder und Zielformat) eine individuelle Codezeile erstellt und in eine Textdatei nach /tmp kopiert. Diese Textdatei dient als List für alle abzuarbeitenden Konvertierungen. Die Datei wird danach Zeile für Zeile durchgegangen und die Dateien konvertiert. Ist eine Zeile fertig wird sie gelöscht und mit der nächsten weiter gemacht bis alle erledigt sind. Ich kann während des Encoding weitere hinzufügen die dann abgearbeitet werden wenn sie an der Reihe sind. Das läuft seit Monaten stabil. Ein kurzes Bsp: Für die Konvertierung in mp3 mit FFmpeg verwende ich diese Zeile um die Codezeile in die Textdatei zu schreiben:
echo -n ffmpeg -i "'$file'" -ab 160k -fflags +bitexact "'$file'"-queue.mp3 >> "$mp3_queue" ; echo -n " && " >> "$mp3_queue" ; echo mv "'$file'"-queue."$ext" "'$file'"-neu."$ext" >> "$mp3_queue"
Das mv dient nur dazu, dass ich während des Vorganges erkenne ob die Datei gerade läuft (*-queue.mp3) oder schon fertig ist (*-neu.mp3). Problem sind hier die Single-Quotes eingerahmt von Double-Quotes. In der Textdatei stehen dann nur die Single-Quotes mit drin. Anders hat es nicht funktioniert mit Leerzeichen in den Dateinamen. Jetzt hatte ich eine Datei mit "D'Agostino" im Namen und der Single-Quote wurde logischerweise falsch erkennt. Gibt es eine Möglichkeit in die Textdatei auch Double-Quotes zu schreiben? Wenn ich z. B. statt
"'$file'"
'"$file"'
verwende wir die Variable nicht ersetzt sondern 1:1 übernommen. Mit
""$file""
werden überhaupt keine Quotes genutzt. Müsste ich die Single-Quotes irgendwie anders maskieren? Entweder schon vorher den Inputdateinamen auf Single-Quotes prüfen und irgendwie maskieren oder die Single-Quotes in der Codezeile?