Si je voulais créer plusieurs répertoires (sur le 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, exécutez simplement
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}
Faites attention à ne pas entrer d'espaces
Faites une liste des noms des répertoires de votre choix 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 printf
tip)
printf '%s' 'foo,bar,baz' | xargs -d, mkdir
$ ls
$ printf '%s' 'foo,bar,baz' | xargs -d, mkdir
$ ls
bar baz foo
$
Vous pouvez l'intégrer dans une fonction pour en faciliter l'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ée par des virgules? Cela peut être fait.
Shell + coreutils
Étant donné que tout le monde poste des marqueurs, voici le mien (mkdir + substitution de paramètre plus + redirection de shell).
DIR:/testdir
[email protected]:$ ls
DIR:/testdir
[email protected]:$ mkdir $( tr '[,\n]' ' ' < /home/xieerqi/dirList.txt )
DIR:/testdir
[email protected]:$ ls
dirFive/ dirfour/ dirone/ dirthree/ dirtwo/
AWK
AWK est un langage de traitement de texte, mais il possède une fonction system()
qui appelle le shell par défaut et exécute la commande [s] entre parenthèses (qui doit être une chaîne).
DIR:/xieerqi
[email protected]:$ awk -F ',' '{for(i=1;i<=NF;i++) system("mkdir "$i)}' dirList.txt
DIR:/xieerqi
[email protected]:$ 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
[email protected]:$ cat dirList.txt
dirone,dirtwo,dirthree
Vous pouvez également 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, à se débarrasser de \n
à la fin, à 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. 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 la liste. Remplacez vos propres valeurs si nécessaire
DIR:/testdir
[email protected]:$ ls
DIR:/testdir
[email protected]:$ /home/xieerqi/makeDirs.py
DIR:/testdir
[email protected]:$ ls
dirFive/ dirfour/ dirone/ dirthree/ dirtwo/
DIR:/testdir
[email protected]:$ 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 accepte plusieurs arguments et s’exécute simplement comme ci-dessous
mkdir dir1 dir2 dir3 ... dirN
Si vous souhaitez créer plusieurs sous-répertoires, vous pouvez passer ces arguments dans {} comme indiqué ci-dessous
mkdir dir1 dir2/{subdir1, subdir2, subdir3, subdirN} dir3 dirN
Lire d'autres questions sur les étiquettes command-line directory coreutils mkdir