it-swarm-es.tech

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

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

25
Steve Burdine

Probablemente sea más fácil usar un bucle for:

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, debe usar algo como seq

18
Michael Mrozek

La sintaxis {} Es una sintaxis Bash no vinculada a la construcción for.

mkdir {A..Z}

es suficiente por sí solo.

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

71
rcrowley

También puede hacer combinaciones más complejas (intente con echo en lugar de mkdir para 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

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 $_ }'
7
dhd