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.