Ich habe ein kleines Skript, das alle Dateien eines Ordners durchläuft und einen (normalerweise lang anhaltenden) Befehl ausführt. Im Grunde ist es
for file in ./folder/*;
do
./bin/myProgram $file > ./done/$file
done
(Bitte ignorieren Sie Syntaxfehler, es ist nur Pseudocode).
Ich wollte dieses Skript jetzt zweimal gleichzeitig ausführen. Offensichtlich ist die Ausführung nicht erforderlich, wenn ./done/$file vorhanden ist. Also habe ich das Skript in geändert
for file in ./folder/*;
do
[ -f ./done/$file ] || ./bin/myProgram $file >./done/$file
done
Grundsätzlich stellt sich also die Frage: Ist es möglich, dass sich beide Skripte (oder im Allgemeinen mehr als ein Skript) tatsächlich am selben Punkt befinden und prüfen, ob die fehlgeschlagene done
Datei vorhanden ist und der Befehl zweimal ausgeführt wird?
es wäre einfach perfekt, aber ich bezweifle es sehr. Dies wäre zu einfach: D Wenn es vorkommen kann, dass sie dieselbe Datei verarbeiten, ist es dann möglich, die Skripte irgendwie zu "synchronisieren"?
xargs
oder GNU make
oder eine Version von haben parallel
, müssen Sie dieses spezielle Rad nicht neu erfinden.
xargs
mit der-P
verfügbaren Option haben, lesen Sie diese Frage .