Wie kann ich Ordner in Ordnern im Terminal erstellen?

12

Ich habe einen Ordner mit dem Namen, musicin dem sich alle Künstlerordner befinden. Gibt es eine Möglichkeit , diese Ordner zu erstellen: 1. Albums, 2. EP, 3. Singles, 4. Livein allen Künstlern Ordner mit einem Befehl?

wjandrea
quelle

Antworten:

12

Führen Sie dies im Musikordner aus, in dem sich die Künstlerordner befinden:

for artist in */; do
   for folder in "1. Albums" "2. EP" "3. Singles" "4. Live"; do
      mkdir "$artist/$folder"
   done
done

Sie können dies auf Ihrer CLI ausführen oder es zu einem Shell-Skript machen, indem Sie es #!/bin/shals erste Zeile hinzufügen und in einer Datei speichern. Vergessen Sie nicht, die Datei ausführbar zu machen.

Was es tut: Es iteriert über alle Verzeichnisse ( */) innerhalb des aktuellen Verzeichnisses, dann für jedes dieser Verzeichnisse, iteriert über den gewünschten Unterordner (den zweiten for) und erstellt dann den gewünschten (relativen) Unterordner.

Kieferhai
quelle
1
Oh, es ist wunderschön, das wird in die Geschichte eingehen ;-)
Steve
18

Vielleicht möchten Sie Ihre {lockigen} Zahnspangen für diese anziehen

Für dieses Argument werden wir so tun, als ob ./music nicht existiert

In Ihrem Basisverzeichnis für ./music verwenden wir den Befehl -p, um bei Bedarf Unterverzeichnisse zu erstellen, und die geschweiften Klammern werden verwendet, um ein kleines Array zu erstellen

Der Befehl -pist die Abkürzung für Parent. Wenn Sie sich leichter daran erinnern können, können Sie ihn --parentstattdessen verwenden

mkdir -p ./music/{"1. Albums","2. EP","3. Singles","4. Live"}

Wenn Sie damit herumspielen möchten, können Sie zum Beispiel

mkdir -p ./folder/prefix{a{1/only,2,3},b,c}suffix/more{z,y,x}

Sie haben verschachtelte Ausdrücke, Sie können die geschweiften Klammern in die Mitte einer Zeichenfolge einfügen und Sie können auch zulassen, dass das Unterverzeichnis dem Beispiel folgt, und Sie können mit Ihren Unterverzeichnissen für ein bestimmtes Array spezifisch sein

Ich schlage vor, Sie erstellen irgendwo eine Datei, in der Sie mit solchen Befehlen Ihre eigenen Vorlagen erstellen und ihnen Beschreibungen geben können

Besuchen Sie diese Seite für weitere Informationen https://www.linuxjournal.com/content/bash-brace-expansion und https://www.linux.com/tutorials/all-about-curly-braces-bash/

Steve
quelle
5
Persönlich gefällt mir diese Antwort besser, weil Sie nicht als Programmierer denken müssen. Ich verwende selten die Methode der geschweiften Klammer, aber sie ist viel eleganter.
Kieferhai
6
OP will die 4 subdir innerhalb jedes subdir platziert selbst music, so dass die korrekte ARG mkdirwäre./music/*/{"1. Albums","2. EP","3. Singles","4. Live"}
joH1
1
Zu Ihrer Information, -pist die Kurzform von --parent.
Amedee Van Gasse