बैश में आपका स्वागत है। यह एक पुरानी, अंधेरा और रहस्यमय चीज है, जो महान जादू के लिए सक्षम है। :-)
जिस विकल्प के बारे में आप पूछ रहे हैं वह find
कमांड के लिए है, हालांकि बैश के लिए नहीं। अपनी कमांड लाइन से, आप विकल्प देखने के लिए man find
कर सकते हैं।
एक आप देख रहे हैं के लिए "या" -o
है:
list="$(find /home/user/Desktop -name '*.bmp' -o -name '*.txt')"
कहा ... ऐसा मत करो। इस तरह का संग्रहण सरल फ़ाइल नामों के लिए काम कर सकता है, लेकिन जैसे ही आपको विशेष पात्रों, जैसे रिक्त स्थान और न्यूलाइन के साथ सौदा करना है, सभी दांव बंद हैं। विवरण के लिए ParsingLs देखें।
$ touch 'one.txt' 'two three.txt' 'foo.bmp'
$ list="$(find . -name \*.txt -o -name \*.bmp -type f)"
$ for file in $list; do if [ ! -f "$file" ]; then echo "MISSING: $file"; fi; done
MISSING: ./two
MISSING: three.txt
पथनाम विस्तार (ग्लोबिंग) फ़ाइलों का ट्रैक रखने के लिए एक बेहतर/सुरक्षित तरीका प्रदान करता है। तो फिर तुम भी बैश सरणियों का उपयोग कर सकते हैं:
$ a=(*.txt *.bmp)
$ declare -p a
declare -a a=([0]="one.txt" [1]="two three.txt" [2]="foo.bmp")
$ for file in "${a[@]}"; do ls -l "$file"; done
-rw-r--r-- 1 ghoti staff 0 24 May 16:27 one.txt
-rw-r--r-- 1 ghoti staff 0 24 May 16:27 two three.txt
-rw-r--r-- 1 ghoti staff 0 24 May 16:27 foo.bmp
Bash FAQ बैश में प्रोग्रामिंग के बारे में अन्य उत्कृष्ट सुझावों के बहुत सारे है।
रिक्तियों के साथ फ़ाइल नामों के साथ सामना करने के लिए आप के लिए उद्धरण चिह्नों का उपयोग करने की आवश्यकता होगी ' बाद में $ list' चर, जैसा कि 'i i "$ list" में है; echo $ i करते हैं; done'। डबल कोट्स के बिना आपकी स्क्रिप्ट प्रत्येक फाइल के रूप में इस "फ़ाइल नाम जैसे .jpg" पर विचार करेगी: "फ़ाइल नाम", "पसंद" और "this.jpg"। – ash108