Inputs einer For-Schleife nacheinander abarbeiten lassen statt parallel

Mr. Brooks

Lt. Commander
Registriert
Aug. 2011
Beiträge
1.441
Hallo,

angenommen ich lasse über eine For-Schleife alle *.png-Dateien eines Ordner in *.jpg umwandeln, dann werden die Schritte immer parallel ausgeführt. Das mag bei recht simpler Bildkonvertierung kein Problem sein, hat man aber andere Aufgaben, wie die Konvertierung von Audio-Dateien oder sind die Bilder sehr groß kann das ein Problem werden. Gibt es eine Möglichkeit die Bilder nacheinander abzuarbeiten? Das 2. soll erst starten wenn das 1. fertig ist.

Mr. Brooks
 
Nornalerweise werden die Schleifen (logischerweise) iterativ abgearbeitet, wenn du kein Threading implementierst.

Gib doch mal paar mehr Infos... Bash?
 
Zuletzt bearbeitet:
Dazu müsste das konvertierende Programm ein Feedback geben, wann es mit seiner Arbeit an einer Datei fertig ist.
Dieses Feedback kann in der for-schleife abgefragt werden, bevor diese zur nächsten Iteration geht.
Ohne Feedback könntest du mit einer fixen Wait-Time arbeiten, in der das Konvertierprogramm Zeit hat zu arbeiten.
 
Hier das Skript. Ist eine etwas abgewandelte Version dessen was ich schon hier https://www.computerbase.de/forum/threads/dateierweiterung-bei-for-skript-entfernen.1711050/ gepostet hatte.

Code:
for j in "$@"
do
	mkdir -p "${j%.*}"
	convert -density 300x300 -units pixelsperinch "$j" -compress lzw +adjoin "${j%.*}"/"$j.tiff"
done

(Ich hab auch hier ein paar Optionen für convert weggelassen, die mit dem Skript an sich nichts zu tun haben).

Das Skript arbeitet als Serve-Menü und ich erzeuge damit aus PDF-Dateien zunächst einen Ordner mit dem Namen der Input-Datei (ohne Daeierweiterung) und lasse dann die Seiten als Einzelbilder in den Ordner schreiben. Ich hab das mal für 2 PDFs gemacht und mit dann die Erstellungszeitpunkte einiger Bilder aus beiden Ordner angesehen und es gibt Überschneidungen. Das heißt sie wurden parallel erzeugt. Sonst müsste ja die letzte Datei der 1. PDF einen (geringfügig) früheren Zeitstempel haben als die erste Datei der 2. PDF. Da der Start von convert (aus mir unbekannten Gründen) aber ohnehin ein paar Augenblicke dauert, sollten die Zeitstempel schon ein paar Sekunden auseinander liegen.
Ergänzung ()

Hab das ganze jetzt nochmal mit Audiokonvertierung getestet. Die Dateien werden definitiv parallel abgearbeitet, nicht nacheinander. Wie kann man das umstellen?
 
If a command is terminated by the control operator &, the shell executes the command in the background in a subshell. The shell does not wait for the command to finish, and the return status is 0. Commands separated by a ; are executed sequentially; the shell waits for each command to terminate in turn. The return status is the exit status of the last command executed.

Weiß nicht, ob der Semikolon auch in einem Skript und einer for-Schleife funktioniert, aber einen Versuch wäre es wert.
 

Ähnliche Themen

Zurück
Oben