बैश में वर्णमाला के माध्यम से लूपिंग


84

मैं mv'x' से डायरेक्टरी 'x' से शुरू होने वाली सभी फाइलों को चाहता हूँ ; कुछ इस तरह:

mv path1/x*.ext path2/x

और यह सभी वर्णमाला अक्षरों के लिए करते हैं a, ..., z

मैं एक बैश स्क्रिप्ट कैसे लिख सकता हूं जो वर्णमाला के माध्यम से 'x' लूप बनाती है?

जवाबों:


140
for x in {a..z}
do
    echo "$x"
    mkdir -p path2/${x}
    mv path1/${x}*.ext path2/${x}
done

1
क्या मैं पूछ सकता हूं कि आपने 4 और 5 वीं पंक्ति पर ब्रेसिज़ के साथ x क्यों लगाया?
ली

यहाँ इसकी आवश्यकता नहीं है, लेकिन अच्छी तरह से, यह काम करता है, और मापदंडों को बेहतर बनाता है;) gnu.org/software/bash/manual/…
Kamil Dziedzic

1
आमतौर पर "$x"यह पर्याप्त है और इसे बाहर खड़ा करने का एक बेहतर तरीका है।
वीजुन झोउ

39

इससे आप कार्य शुरू कर पाएंगे:

for letter in {a..z} ; do
  echo $letter
done

21

नेस्टेड ब्रेस विस्तार का उपयोग करके स्पेनिश वर्णमाला उत्पन्न करने का तरीका यहां बताया गया है

for l in {{a..n},ñ,{o..z}}; do echo $l ; done | nl
1  a
 ...
14  n
15  ñ
16  o
...
27  z

या केवल

echo -e {{a..n},ñ,{o..z}}"\n" | nl

यदि आप अप्रचलित 29 वर्ण स्पेनिश वर्णमाला उत्पन्न करना चाहते हैं

echo -e {{a..c},ch,{d..l},ll,{m,n},ñ,{o..z}}"\n" | nl

फ्रेंच वर्णमाला या जर्मन वर्णमाला के लिए भी ऐसा ही किया जा सकता है।


3

का उपयोग कर rename:

mkdir -p path2/{a..z}
rename 's|path1/([a-z])(.*)|path2/$1/$1$2' path1/{a..z}*

यदि आप फ़ाइल नाम से अग्रणी [az] चरित्र को स्ट्रिप-ऑफ करना चाहते हैं, तो अपडेट किया गया पेरलेक्स होगा:

rename 's|path1/([a-z])(.*)|path2/$1/$2' path1/{a..z}*


1

इस सवाल और जवाब ने मेरी समस्या को आंशिक रूप से हल करने में मदद की।
मुझे बैश में वर्णमाला के एक भाग पर जोर लगाने की जरूरत थी ।

हालांकि विस्तार सख्ती से शाब्दिक है

मुझे एक समाधान मिला: और इसे और भी सरल बना दिया:

START=A
STOP=D
for letter in $(eval echo {$START..$STOP}); do
    echo $letter
done

जिसके परिणामस्वरूप:

A
B
C
D

आशा है कि किसी को उसी समस्या की तलाश में मदद करने के लिए जो मुझे हल करना था, और यहाँ भी समाप्त होता है

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