Ich möchte ein Verzeichnis so anlegen, dass ich die Verzeichnisse von a
bis benennen muss z
. In jedem dieser Verzeichnisse muss ich Unterverzeichnisse erstellen, damit sie mit usw. gekennzeichnet aa
sind ab
.
So zum Beispiel für das Verzeichnis m
, mein Unterverzeichnis als markiert werden ma
, mb
bis mz
.
shell-script
mkdir
Ramesh
quelle
quelle
/usr/share/terminfo
mit [az] auflisten und diese Ausgabe verwenden. Linux ist in dieser Hinsicht ziemlich sparsam. Früher gab es Einträge für alle Groß- und Kleinbuchstaben sowie die Ziffern.Antworten:
Versuchen:
Bash wird erweitert
XXX{a..z}
, umXXXa
,XXXb
und so weiter. Die innere Schleife, die Sie haben, ist nicht erforderlich.Danach:
quelle
Also, mit
bash
der Alphabet-Erweiterung funktioniert das: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:
... 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, dasbash
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:
Wie Sie sehen können, werden die
for
Schleifen nur einmal pro Positionsparameter-Array-Index ausgeführt, den ich hier durch einfaches Übergebensh
der Parameter beim Aufruf und darüber mit festgelegt habeset ${positionals}
. Aberprintf
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 gesamtefor
Ausgabe einer Schleife auf dieselbe Weise über die Pipe zudone >file
streamen, wird alles in eine Datei gestreamt - die Ausgabedatei wird nur einmal für das gesamtefor...done
Konstrukt geöffnet und geschlossen .quelle
Von hier aus habe ich ein Skript wie dieses erstellt. Wenn ich jedoch eine elegante Lösung erhalte, akzeptiere ich sie als Antwort.
quelle
/home/ramesh/"$x"/"$x$y"
,/home/ramesh/"$x/$x$y"
oder"/home/ramesh/$x/$x$y"
- sie sind alle gleichwertig.In
Perl
:File::Path
ist Kernmodul seitPerl 5.001
.quelle