Come posso creare più directory contemporaneamente in una directory?


25

So che con mkdir posso fare mkdir A B C D E Fper creare ogni directory. Come posso creare le directory AZ o 1-100 senza digitare una lettera o un numero?

Risposte:


18

Probabilmente è più semplice usare un forloop:

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

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

Tuttavia, è necessario almeno bash 3.0; altrimenti devi usare qualcosa di simileseq


1
Michael grazie! essendo curioso l'ho anche provato aggiungendo test di fronte a $ char per char in {A..Z}; fai mkdir test $ char fatto che mi ha dato test directory [AZ], sempre buono da imparare
Steve Burdine

Una cosa da tenere a mente è come verranno ordinati i nomi dei file quando li elencherai o li utilizzerai con caratteri jolly come *. '11' verrà ordinato prima di '2'. Questo può essere evitato se si dispone che tutti i numeri abbiano la stessa lunghezza con zeri iniziali. Dennis Williams mostra come farlo in bash 4, ma puoi codificare il tuo script per farlo se non hai bash 4.
Joe

71

La {}sintassi è sintassi di Bash non legata al forcostrutto.

mkdir {A..Z}

è sufficiente tutto da solo.

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


5
Oh, è spettacolare. Questa è una risposta molto migliore
Michael Mrozek

1
Non lo sapevo, ottimo consiglio!
inverti il

5
+1 per la bellezza, +1 per lo stile, +1 per rcrowley
Stefan

+500 ricompensa da parte mia.
George Chalhoub, il

Questo e spettacolare! appena usato:mkdir -p ./logs-{1..5}
Pranav 웃

8

Puoi anche fare combinazioni più complesse (prova queste echoinvece di mkdirnon ripulirle in seguito):

Confrontare

$ 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

Se hai Bash 4, prova

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

e

$ echo file{0001..10..2}
file0001 file0003 file0005 file0007 file0009

7

Su Linux puoi generare sequenze di cifre con il comando "seq", ma questo non esiste su tutti i sistemi Unix. Ad esempio per generare directory da 1 a 100:

mkdir `seq 1 100`

Mentre puoi certamente creare directory dalla A alla Z con i programmi di utilità shell:

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

Probabilmente è molto meno brutto usare solo Perl:

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

-1

mkdir direct{1..3}si tradurrà in mkdir direct1 direct2 direct3e così via. Lo stesso per{a..z}


2
questa è una reiterazione di tre risposte esistenti e quella di cui ho già commentato
Jeff Schaller

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.