Also, mit bash
der Alphabet-Erweiterung funktioniert das:
set {a..z}
for a do printf "./$a/$a%s\n" "$@"
done | xargs mkdir -p
Und wenn Sie das Alphabet nur einmal in der ersten Zeile eingeben, sollte das gleiche Konzept auf jede Shell übertragbar sein. Es gibt andere Möglichkeiten, um zur festgelegten Zeile zu gelangen, wenn Sie sie nicht wie folgt eingeben möchten:
seq -sP32P 97 123|dc
a b c d e f g h i j k l m n o p q r s t u v w x y z
... funktioniert beispielsweise in einem ASCII-Gebietsschema. Sie könnten also einen set $(seq -sP32P 97 123|dc)
oder einen anderen Befehl ausführen, mit dem Sie eine $IFS
getrennte Liste der von Ihnen benötigten Argumente erhalten, aber ich meine, es ist wahrscheinlich besser, das bash
Ding nur zu verwenden oder es einzugeben.
Jedenfalls denke ich, dass ich es so machen würde, wenn nur, weil es nur mkdir
so oft wie nötig aufruft .
Und um zu demonstrieren, wie es funktioniert, hier eine kleine Debug-Ausgabe eines kleineren Sets:
sh -cx 'for n do printf "./$n/$n%s\n" "$@"; done|cat' -- arg1 arg2 arg3
+ for n in '"$@"'
+ printf './arg1/arg1%s\n' arg1 arg2 arg3
+ cat
+ for n in '"$@"'
+ printf './arg2/arg2%s\n' arg1 arg2 arg3
+ for n in '"$@"'
+ printf './arg3/arg3%s\n' arg1 arg2 arg3
./arg1/arg1arg1
./arg1/arg1arg2
./arg1/arg1arg3
./arg2/arg2arg1
./arg2/arg2arg2
./arg2/arg2arg3
./arg3/arg3arg1
./arg3/arg3arg2
./arg3/arg3arg3
Wie Sie sehen können, werden die for
Schleifen nur einmal pro Positionsparameter-Array-Index ausgeführt, den ich hier durch einfaches Übergeben sh
der Parameter beim Aufruf und darüber mit festgelegt habe set ${positionals}
. Aber printf
erhält die gleiche Anordnung in der Argumentliste für jede Iteration und wendet seine Formatstring zu jedem seiner Argumente, so dass Sie den Anschein von Rekursion ohne unnötige Rekursion erhalten.
Wenn Sie den done|command
Willen dazu hinzufügen, die gesamte for
Ausgabe einer Schleife auf dieselbe Weise über die Pipe zu done >file
streamen, wird alles in eine Datei gestreamt - die Ausgabedatei wird nur einmal für das gesamte for...done
Konstrukt geöffnet und geschlossen .