¿Cómo hago múltiples directorios a la vez en un directorio?

25

Sé que con mkdir puedo hacer mkdir A B C D E Fpara crear cada directorio. ¿Cómo creo directorios AZ o 1-100 sin escribir cada letra o número?

Steve Burdine
fuente

Respuestas:

18

Probablemente sea más fácil usar un forbucle:

for char in {A..Z}; do
    mkdir $char
done

for num in {1..100}; do
    mkdir $num
done

Sin embargo, necesita al menos bash 3.0; de lo contrario tienes que usar algo comoseq

Michael Mrozek
fuente
1
Michael gracias! siendo curioso, también lo intenté agregando prueba frente a $ char para char en {A..Z}; do mkdir test $ char done que me dio la prueba de directorios [AZ], siempre es bueno aprender
Steve Burdine
Una cosa a tener en cuenta es cómo se ordenarán los nombres de los archivos cuando los enumere o los use con comodines como *. '11' se ordenará antes que '2'. Esto se puede evitar si organiza que todos los números tengan la misma longitud con ceros a la izquierda. Dennis Williams muestra cómo hacerlo en bash 4, pero puede codificar su script para hacerlo si no tiene bash 4.
Joe
71

La {}sintaxis es la sintaxis de Bash no vinculada a la forconstrucción.

mkdir {A..Z}

es suficiente por sí solo.

http://www.gnu.org/software/bash/manual/bashref.html#Brace-Expansion

rcrowley
fuente
55
Oh, eso es espectacular Esta es una respuesta mucho mejor
Michael Mrozek
1
No lo sabía, ¡gran consejo!
invertir
55
+1 para belleza, +1 para estilo, +1 para rcrowley
Stefan
+500 generosidad de mi parte.
George Chalhoub
¡Esto es asombroso! solo lo usé:mkdir -p ./logs-{1..5}
Pranav 웃
8

También puede hacer combinaciones más complejas (intente con estas en echolugar de mkdirpara que no haya limpieza después):

Comparar

$ echo pre-{{F..G},{3..4},{m..n}}-post
pre-F-post pre-G-post pre-3-post pre-4-post pre-m-post pre-n-post

a

$ echo pre-{F..G}{3..4}{m..n}-post
pre-F3m-post pre-F3n-post pre-F4m-post pre-F4n-post pre-G3m-post pre-G3n-post
pre-G4m-post pre-G4n-post

Si tienes Bash 4, prueba

$ echo file{0001..10}
file0001 file0002 file0003 file0004 file0005 file0006 file0007 file0008 file0009
file0010

y

$ echo file{0001..10..2}
file0001 file0003 file0005 file0007 file0009
Pausado hasta nuevo aviso.
fuente
7

En Linux puede generar secuencias de dígitos con el comando "seq", pero esto no existe en todos los sistemas Unix. Por ejemplo, para generar directorios del 1 al 100:

mkdir `seq 1 100`

Si bien puede crear directorios de la A a la Z con utilidades de shell:

seq 65 90 \
    | while read foo; do printf "%b\n" `printf '\\\\x%x\n' $foo`; done \
    | xargs mkdir

Probablemente sea mucho menos feo usar Perl:

perl -e 'foreach (ord "A"..ord "Z") { mkdir chr $_ }'
dhd
fuente
-1

mkdir direct{1..3}resultará en mkdir direct1 direct2 direct3y así sucesivamente. Igual por{a..z}

Lionel AVOGNON
fuente
2
Esta es una reiteración de tres respuestas existentes y la que ya comenté
Jeff Schaller
-2

mkdir {A..Z} mkdir {0..100} mkdir test_ {A..Z} y así sucesivamente.

Avognon Lionel
fuente
No lo entiendo
Pierre.Vriens
1
esto ya ha sido cubierto
Jeff Schaller