2011-12-14 14 views
14

में खोज कमांड का उपयोग करके मैं बस बैश स्क्रिप्ट का उपयोग शुरू करता हूं और मुझे एक से अधिक फ़ाइल प्रकार के साथ खोज कमांड का उपयोग करने की आवश्यकता है।बैश स्क्रिप्ट

list=$(find /home/user/Desktop -name '*.pdf') 

पीडीएफ प्रकार के लिए इस कोड को काम, लेकिन मैं .txt की तरह एक से अधिक फ़ाइल प्रकार खोज या together.Have आप किसी भी विचार .bmp करना चाहते हैं?

उत्तर

19

बैश में आपका स्वागत है। यह एक पुरानी, ​​अंधेरा और रहस्यमय चीज है, जो महान जादू के लिए सक्षम है। :-)

जिस विकल्प के बारे में आप पूछ रहे हैं वह 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 बैश में प्रोग्रामिंग के बारे में अन्य उत्कृष्ट सुझावों के बहुत सारे है।

3

आप इस का उपयोग कर सकते हैं:

list=$(find /home/user/Desktop -name '*.pdf' -o -name '*.txt' -o -name '*.bmp') 

इसके अलावा, आप -iname-name के बजाय का उपयोग करने के लिए ".PDF" (अपर-केस) विस्तार के साथ फ़ाइलों को पकड़ने के लिए और साथ ही चाहते हो सकता है।

+2

रिक्तियों के साथ फ़ाइल नामों के साथ सामना करने के लिए आप के लिए उद्धरण चिह्नों का उपयोग करने की आवश्यकता होगी ' बाद में $ list' चर, जैसा कि 'i i "$ list" में है; echo $ i करते हैं; done'। डबल कोट्स के बिना आपकी स्क्रिप्ट प्रत्येक फाइल के रूप में इस "फ़ाइल नाम जैसे .jpg" पर विचार करेगी: "फ़ाइल नाम", "पसंद" और "this.jpg"। – ash108

संबंधित मुद्दे