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)?
mkdir
prend plusieurs arguments, simplement exécuter
mkdir dir_1 dir_2
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:
mkdir sa{1..50}
mkdir -p sa{1..50}/sax{1..50}
mkdir {a-z}12345
mkdir {1,2,3}
mkdir test{01..10}
mkdir -p `date '+%y%m%d'`/{1,2,3}
mkdir -p $USER/{1,2,3}
test01
à test10
.Donc, si j'ai bien compris et que vous voulez créer des répertoires, et à l'intérieur de ceux-ci, vous pouvez le faire:
mkdir -p sa{1..10}/{1,2,3}
et obtenez sa1, sa2, ..., sa10 et dans chaque dir. 1, 2 et 3.
C'est très simple, vous permet de créer une structure de répertoires telle que:
Websites/
static/
cs
js
templates/
html
Vous pouvez le faire en une seule commande comme ceci:
mkdir -p Website/{static/{cs,js},templates/html}
Attention à ne pas entrer dans les espaces
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.
mkdir `cat list`
Vous devriez maintenant avoir tous les répertoires nommés dans votre liste.
Quelque chose comme ça? (merci à muru pour le conseil printf
)
printf '%s' 'foo,bar,baz' | xargs -d, mkdir
$ ls
$ printf '%s' 'foo,bar,baz' | xargs -d, mkdir
$ ls
bar baz foo
$
Vous pouvez envelopper dans une fonction pour la facilité d'utilisation:
function mkdir_cs {
printf '%s' "$1" | xargs -d, mkdir
}
$ ls
$ mkdir_cs 'foo,bar,baz'
$ ls
bar baz foo
$
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).
DIR:/testdir
skolodya@ubuntu:$ ls
DIR:/testdir
skolodya@ubuntu:$ mkdir $( tr '[,\n]' ' ' < /home/xieerqi/dirList.txt )
DIR:/testdir
skolodya@ubuntu:$ ls
dirFive/ dirfour/ dirone/ dirthree/ dirtwo/
AWK
AWK est un langage de traitement de texte, mais il possède une très jolie fonction system()
qui appelle le shell par défaut et exécute la commande [s] entre parenthèses (ce qui doit être une chaîne).
DIR:/xieerqi
skolodya@ubuntu:$ awk -F ',' '{for(i=1;i<=NF;i++) system("mkdir "$i)}' dirList.txt
DIR:/xieerqi
skolodya@ubuntu:$ ls -ld dir*
-rw-rw-r-- 1 xieerqi xieerqi 23 Feb 9 11:41 dirList.txt
drwxrwxr-x 2 xieerqi xieerqi 4096 Feb 9 11:42 dirone/
drwxrwxr-x 2 xieerqi xieerqi 4096 Feb 9 11:42 dirthree/
drwxrwxr-x 2 xieerqi xieerqi 4096 Feb 9 11:42 dirtwo/
DIR:/xieerqi
skolodya@ubuntu:$ cat dirList.txt
dirone,dirtwo,dirthree
Ou vous pouvez supprimer ,
avec la fonction gsub()
et appeler system("mkdir "$0)
, mais cela peut poser un problème si vous souhaitez créer des répertoires avec des espaces dans leur nom.
Python
La méthode pythonique consiste à lire chaque ligne, à supprimer le code \n
suivant, à tout placer dans une liste, à parcourir les éléments de la liste et à créer des répertoires par élément. Notez que dans l'exemple ci-dessous, /home/xieerqi/dirList.txt
est le chemin complet donné à mon fichier, et nous établissons le chemin complet de chaque nouveau répertoire en joignant la chaîne /home/username/
et le nom de répertoire lu dans list. Remplacez vos propres valeurs si nécessaire
DIR:/testdir
skolodya@ubuntu:$ ls
DIR:/testdir
skolodya@ubuntu:$ /home/xieerqi/makeDirs.py
DIR:/testdir
skolodya@ubuntu:$ ls
dirFive/ dirfour/ dirone/ dirthree/ dirtwo/
DIR:/testdir
skolodya@ubuntu:$ cat /home/xieerqi/makeDirs.py
#!/usr/bin/env python
import os
with open("/home/xieerqi/dirList.txt") as file:
for line in file:
for directory in line.strip().rsplit(','):
path = '/home/xieerqi/testdir/' + directory
os.makedirs(path)
la commande mkdir prend plusieurs arguments simplement comme ci-dessous
mkdir dir1 dir2 dir3 ... dirN
Si vous souhaitez créer plusieurs sous-répertoires, vous pouvez transmettre ces arguments à {} comme indiqué ci-dessous.
mkdir dir1 dir2/{subdir1, subdir2, subdir3, subdirN} dir3 dirN