J'essaie de créer une arborescence de répertoires de A à Z où le répertoire suivant se trouve dans le répertoire actuel.
Par exemple: B est dans A et C est dans B et ainsi de suite.
-A
--B
---C
----...Z
Des indices sur la façon de le faire de manière automatisée?
Avec mkdir
, printf
et le développement de l'accolade de bash:
$ mkdir -p "$(printf "%s/" {A..Z})"
$ tree A
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
25 directories, 0 files
{A..Z}
passe à A B ... Z
,printf "%s/"
affiche les arguments avec un /
après eux, donc je reçois A/B/...Z/
mkdir -p
crée le répertoire A/B/.../Z
avec tous les répertoires parents à créer.Au niveau très simple, vous pouvez utiliser l'extension {A..Z}
pour générer toute la lettre, puis créer et entrer chaque lettre de manière itérative:
~/test_directory$ for d in {A..Z}; do mkdir "$d"; cd "$d"; done
~/test_directory/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$
Comme vous pouvez le voir dans la sortie de mon invite, vous avez maintenant un répertoire complètement chaîné.
Toutefois, si les noms de répertoires diffèrent de l'alphabet, vous devrez fournir la liste des noms de répertoires, éventuellement via un fichier, sur lequel vous pourrez effectuer une nouvelle itération et la même procédure. Fondamentalement, cette
while IFS= read -r dir_name;do mkdir "$dir_name"; cd "$dir_name" ;done < directory_list.txt
Même si façon printf
de Mur est imbattable, j'aime personnellement jot
pour ce genre de chose. jot
n'est pas installé par défaut dans Ubuntu. Le paquet athena-jot
le fournit. L'une ou l'autre de ces commandes fonctionne:
mkdir -p "$(jot -s/ -c 26 A)"
jot -s/ -c 26 A | xargs mkdir -p
En réalité, toute commande générant la séquence de lettres et les associant à des barres obliques facilitera cette opération, car sa sortie peut ensuite être transmise à mkdir -p
soit via [substitution de commande (comme dans - réponse de mur ) ou en utilisant xargs
. Voici quelques exemples utilisant quelques outils et xargs
qui ne nécessitent pas l’installation de logiciel, sauf peut-être sur des systèmes très minimaux ou Ubuntu Core:
Perl -we 'print join "/", A..Z' | xargs mkdir -p
Ruby -we 'print (?A..?Z).to_a * ?/' | xargs mkdir -p
python3 -c 'print("/".join(__import__("string").ascii_uppercase))' | xargs mkdir -p
Les anciennes versions d'Ubuntu sont accompagnées de Python 2 au lieu de Python 3. Pour cela, il suffit de changer python3
en python
pour que cette dernière commande fonctionne, si vous voulez vraiment le faire avec Python.
De même, manière simple et brève de mur peut aussi être écrit:
printf '%s/' {A..Z} | xargs mkdir -p
Le /
de fin, dans le chemin du répertoire que mkdir -p
est invité à créer, ne pose aucun problème et est sans doute préférable du point de vue stylistique. Mais c'est bien de l'omettre, comme le font les autres exemples de cette réponse.