¿Hay una manera de crear múltiples directorios a la vez con mkdir?

85

Si quisiera crear varios directorios (en el mismo nivel) y luego alimentarlos con una lista separada por comas de nombres de directorios (o algo parecido)

    
pregunta BGroat 09.02.2016 - 19:30

7 respuestas

134

Respuesta corta

mkdir toma múltiples argumentos, simplemente ejecuta

mkdir dir_1 dir_2
    
respondido por el Jacob Vlijm 09.02.2016 - 19:32
131

Puedes usar listas para crear directorios y puede volverse bastante salvaje.

Algunos ejemplos para que la gente piense al respecto:

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} 
  1. 50 directorios desde sa1 hasta sa50
  2. es igual, pero cada uno de los directorios tendrá 50 veces sax1 a sax50 (-p creará directorios principales si no existen.
  3. 26 directorios desde a12345 hasta z12345
  4. la lista separada por comas hace dirs 1, 2 y 3.
  5. 10 directorios desde test01 hasta test10 .
  6. igual que 4 pero con la fecha actual como directorio y 1,2,3 en él.
  7. igual que 4 pero con el usuario actual como directorio y 1,2,3 en él.

Entonces, si lo entendí correctamente y desea crear algunos directorios, y dentro de ellos nuevos directorios, podría hacer esto:

mkdir -p sa{1..10}/{1,2,3}

y obtenga sa1, sa2, ..., sa10 y dentro de cada dirs 1, 2 y 3.

    
respondido por el Rinzwind 09.02.2016 - 19:49
19

Es muy simple, le permite crear una estructura de directorios como:

Websites/
  static/
      cs
      js
  templates/
      html

Puedes hacerlo en un solo comando como este:

mkdir -p Website/{static/{cs,js},templates/html}

Ten cuidado de no ingresar ningún espacio

    
respondido por el anas munir 23.09.2016 - 22:28
14

Haga una lista de los nombres de sus directorios deseados utilizando saltos de línea en lugar de comas como separador. Guarda esa lista.

mkdir 'cat list'

Ahora debería tener todos los directorios nombrados en su lista.

    
respondido por el SpaceCadet 09.02.2016 - 23:53
8

Algo como esto? (gracias a muru por el printf tip)

printf '%s' 'foo,bar,baz' | xargs -d, mkdir
$ ls
$ printf '%s' 'foo,bar,baz' | xargs -d, mkdir
$ ls
bar  baz  foo
$ 

Puede envolverlo en una función para facilitar su uso:

function mkdir_cs {
    printf '%s' "$1" | xargs -d, mkdir
}
$ ls
$ mkdir_cs 'foo,bar,baz'
$ ls
bar  baz  foo
$ 
    
respondido por el kos 09.02.2016 - 19:49
7

¿Entonces quieres una lista de nombres de directorio separados por comas? Eso se puede hacer.

Shell + coreutils

Como todo el mundo está publicando oneliners, aquí también es mío (mkdir + sustitución de parámetros más + redirección 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 es un lenguaje de procesamiento de texto, pero tiene una función system() muy agradable que llamará al shell predeterminado y ejecutará el comando [s] entre paréntesis (que debe ser una cadena).

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

O puede eliminar , con la función gsub() y llamar a system("mkdir "$0) , pero eso puede ser un problema si desea crear directorios con espacios en su nombre

Python

La forma pitónica de hacer lo mismo, sería leer cada línea, deshacerse de \n final, colocar todo en una lista, iterar sobre los elementos de la lista y crear directorios por elemento de la lista. Tenga en cuenta que en el siguiente ejemplo, /home/xieerqi/dirList.txt es la ruta completa dada a mi archivo, y formamos la ruta completa de cada nuevo directorio uniendo la cadena /home/username/ y el nombre de directorio leído de la lista. Sustituye tus propios valores según sea necesario

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)
    
respondido por el Sergiy Kolodyazhnyy 09.02.2016 - 19:44
0

el comando mkdir toma múltiples argumentos, simplemente se ejecuta como se muestra a continuación

mkdir dir1 dir2 dir3 ... dirN

Si desea crear varios subdirectorios, puede pasar esos argumentos en {} como se muestra a continuación

mkdir dir1 dir2/{subdir1, subdir2, subdir3, subdirN} dir3 dirN
    
respondido por el Vijay Sasvadiya 20.07.2018 - 08:38

Lea otras preguntas en las etiquetas