Si je voulais créer plusieurs répertoires (au même niveau), puis lui donner une liste de noms de répertoires séparés par des virgules (ou quelque chose de similaire)?
112
Si je voulais créer plusieurs répertoires (au même niveau), puis lui donner une liste de noms de répertoires séparés par des virgules (ou quelque chose de similaire)?
man mkdir
....man
suivi du nom de la commande.man mkdir
"en quelque sorte" suggère la possibilité de créer plusieurs répertoires à la fois, il n'est pas mentionné spécifiquement, ni comment le faire....
suivant[DIRECTORY]
, ce qui signifie que cet argument peut être répété. Donc,DIRECTORY(ies)
fait référence à tous lesDIRECTORY
arguments passés . Cependant, les commentaires "RTFM" oublient parfois qu'il existe une notation à apprendre.Réponses:
Réponse courte
mkdir
prend plusieurs arguments, lancez simplementla source
Vous pouvez utiliser des listes pour créer des répertoires et cela peut devenir assez sauvage.
Quelques exemples pour amener les gens à y penser:
test01
partest10
.Donc, si j'ai bien compris et que vous voulez créer des répertoires, et à l'intérieur de nouveaux répertoires, vous pouvez faire ceci:
et obtenez sa1, sa2, ..., sa10 et dans chaque dir 1, 2 et 3.
la source
dash
la valeur par défaut/bin/sh
pour Ubuntu.mkdir sa$(seq 0.1 0.1 1)
, tout ce qu'il fait est de créer un répertoire nommé sa0.1 et le reste 0.2, 0.3, ..., 1. Comment puis-je obtenir une expansion décimale sans écrire la totalité de la liste?C'est très simple, vous permet de créer une structure de répertoires telle que:
Vous pouvez le faire en une seule commande comme ceci:
Attention à ne pas entrer dans les espaces
la source
Faites une liste des noms de vos répertoires souhaités en utilisant des sauts de ligne au lieu de virgules comme séparateur. Enregistrez cette liste.
Vous devriez maintenant avoir tous les répertoires nommés dans votre liste.
la source
spaced dir
, alors il va créer deux répertoires,spaced
et `dir.junk\ dir
lelist
fichier donne deux répertoiresjunk\
etdir
. M'a donné la panique quand j'ai vu un\
dans un nom de répertoire.-p
drapeau mentionné dans d'autres réponses. Si tel est le cas, lelist
fichier n'a pas à inclure les répertoires parents dans leurs propres lignes, ils seront détectés et créés automatiquement.Quelque chose comme ça? (merci à muru pour le
printf
tuyau)Vous pouvez envelopper dans une fonction pour la facilité d'utilisation:
la source
printf "%s" "$1" | xargs -d, mkdir
devrait suffire.Vous voulez donc une liste de noms de répertoires séparés par des virgules? Cela peut être fait.
Shell + coreutils
Puisque tout le monde publie des annonces, voici le mien également (mkdir + substitution de paramètre plus + redirection de shell).
AWK
AWK est un langage de traitement de texte, mais il a une
system()
fonction très pratique qui appelle le shell par défaut et exécute la commande [s] entre parenthèses (qui doit être une chaîne).Ou vous pouvez supprimer
,
avecgsub()
function et appelersystem("mkdir "$0)
mais cela peut poser problème si vous souhaitez créer des répertoires avec des espaces dans leur nomPython
Une façon pythonique de faire la même chose serait de lire chaque ligne, de se débarrasser de la fin
\n
, de tout placer dans une liste, de parcourir les éléments de la liste et de créer des répertoires par élément de la liste. Notez que dans l'exemple ci-dessous,/home/xieerqi/dirList.txt
est le chemin complet donné à mon fichier, et nous construisons le chemin complet de chaque nouveau répertoire en joignant chaîne/home/username/
et le nom de répertoire lu dans liste. Remplacez vos propres valeurs si nécessairela source
dir{1..1000}
. Dites, vous voulez faire un répertoire par nom d'utilisateur, ou par projet, ou par emplacement géographique, comme une villeLa commande mkdir prend plusieurs arguments simplement comme ci-dessous
Si vous souhaitez créer plusieurs sous-répertoires, vous pouvez passer ces arguments dans {} comme indiqué ci-dessous (utilisez uniquement des virgules pour séparer les arguments, sans espaces).
la source