मैं एक निर्देशिका में एक साथ कई निर्देशिका कैसे बना सकता हूँ?


25

मुझे पता है कि मैं mkdir के साथ mkdir A B C D E Fप्रत्येक निर्देशिका बनाने के लिए कर सकता हूं । मैं प्रत्येक अक्षर या संख्या में टाइपिंग के साथ निर्देशिका AZ या 1-100 कैसे बनाऊं?

जवाबों:


18

केवल एक forलूप का उपयोग करना शायद सबसे आसान है :

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

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

आपको कम से कम bash 3.0 की आवश्यकता है; अन्यथा आपको कुछ का उपयोग करना होगाseq


1
माइकल धन्यवाद! जिज्ञासु होने के कारण मैंने इसे {A..Z} में char के लिए $ char के सामने परीक्षण जोड़ने की कोशिश की; mkdir परीक्षण $ char ने किया जिससे मुझे निर्देशिकाओं का परीक्षण मिला [AZ], हमेशा सीखने के लिए अच्छा है
स्टीव बर्डिन

एक बात का ध्यान रखें कि जब आप उन्हें सूचीबद्ध करते हैं या वाइल्डकार्ड्स जैसे * का उपयोग करते हैं तो आपकी फ़ाइल के नाम कैसे छाँटे जाएंगे। '11 ’' 2’ से पहले सॉर्ट करेगा। यदि आप सभी संख्याओं के लिए अग्रणी शून्य के साथ समान लंबाई की व्यवस्था करते हैं तो इससे बचा जा सकता है। डेनिस विलियम्स से पता चलता है कि कैसे 4 में बैश करना है, लेकिन आप इसे करने के लिए अपनी स्क्रिप्ट को कोड कर सकते हैं यदि आपके पास बैश नहीं है 4.
जो

71

{}वाक्य रचना से बंधा नहीं बैश वाक्य रचना है forनिर्माण।

mkdir {A..Z}

अपने आप में पर्याप्त है।

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


5
ओह, यह शानदार है। यह एक बहुत अच्छा जवाब है
माइकल Mrozek

1
मैं यह नहीं जानता, महान टिप!
पलटना

5
सौंदर्य के लिए +1, शैली के लिए +1, आरक्रूले के
स्टीफन

+500 इनाम मुझसे।
जॉर्ज चलौब

यह कमाल का है! बस इसका इस्तेमाल किया:mkdir -p ./logs-{1..5}
प्रणव

8

आप और अधिक जटिल संयोजन भी कर सकते हैं ( echoइसके बजाय इनकी कोशिश करें mkdirताकि बाद में कोई सफाई न हो):

तुलना

$ 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

सेवा मेरे

$ 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

यदि आपके पास बैश 4 है, तो प्रयास करें

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

तथा

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

7

लिनक्स पर आप "seq" कमांड के साथ अंकों के अनुक्रम उत्पन्न कर सकते हैं, लेकिन यह सभी यूनिक्स प्रणालियों पर मौजूद नहीं है। उदाहरण के लिए 1 से 100 तक निर्देशिका उत्पन्न करने के लिए:

mkdir `seq 1 100`

हालांकि आप निश्चित रूप से शेल बर्तनों के साथ A से Z तक निर्देशिका बना सकते हैं:

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

यह शायद सिर्फ पर्ल का उपयोग करने के लिए बहुत कम बदसूरत है:

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

-1

mkdir direct{1..3}में mkdir direct1 direct2 direct3और इतने पर परिणाम होगा । उसी के लिए{a..z}


2
यह तीन मौजूदा उत्तरों का पुनर्मिलन है और जिस पर मैंने पहले ही टिप्पणी की थी
जेफ स्कॉलर

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.