Ich finde Dateien, die nicht mit .done enden, wie folgt:
find -type f -not -name \*.done -execdir myscript {} \;
Nun möchte ich Folgendes tun:
- jede gefundene Datei an myscript übergeben
-sourcen Sie jede Datei in Myscript mit dem Quellbefehl
-run myscript für jede Quelldatei
Hinweis: Ich möchte myscript wiederholt ausführen, einmal für jede gefundene Datei. Ich möchte myscript nicht für mehrere Dateien gleichzeitig ausführen. Im Wesentlichen möchte ich also eine Schleife über die gefundenen Dateien ausführen und sie in myscript als Quelle verwenden. Wie kann ich das erreichen?
Antwort1
Ihr find
Befehl wird myscript
für jede gefundene Datei ausgeführt und übergibt den Namen der Datei als erstes Befehlszeilenargument an myscript
.
Sie möchten die Datei in als Quelle verwenden und sollten myscript
daher myscript
Folgendes in den Code aufnehmen:
. ./"$1"
Anmerkungen:
- Ich gehe davon aus,
myscript
dass es von einer Shell interpretiert wird. - Sie haben es erwähnt, es ist
source
aber.
portabler. - Ich habe verwendet
./"$1"
, weil Sie verwendet haben-execdir
.Es scheintEinige Implementierungen vonfind
schließen nicht./
in den String ein, der{}
nach ersetzt wird-execdir
. Wenn dies der Fall wäre, danndieses Missgeschickkönnte passieren. Das Hinzufügen eines expliziten Elements./
verhindert dies.