2009-07-06 1 views
7

में एकाधिक फ़ाइलों पर एक स्क्रिप्ट चलाएं कुछ खोल स्क्रिप्टिंग सीखने के लिए प्रारंभ किया गया। मेरे पास एक पर्ल स्क्रिप्ट है जो एक फ़ाइल पर चलती है। मैं पर्ल स्क्रिप्ट को कीवर्ड "फ़ाइल नाम" वाली सभी फ़ाइलों पर कई गुना चलाने के लिए एक शेल स्क्रिप्ट कैसे लिखूं?यूनिक्स

अंग्रेजी में

तो,

for /filename/ in filenames 
    perl myscript.pl completefilename 

धन्यवाद।

उत्तर

10
find . -name "filename*" -exec perl myscript.pl '{}' \; 
1

बैश में:

files=`ls -1 *` 
for $file in $files; 
do 
    perl myscript.pl $file; 
done 
+0

यह केवल जब तक उन में रिक्त स्थान के साथ कोई फ़ाइल नाम हैं काम करता है। – hillu

0

फ़ाइलें = "कीवर्ड"

"$ फ़ाइलें" में च कर पर्ल myscript.pl $ f

किया http://www.cyberciti.biz/faq/bash-loop-over-file/

से के लिए

+0

लेकिन $ एफ कीवर्ड को खींचता है, जबकि मुझे पूरा फ़ाइल नाम चाहिए (जिसमें कीवर्ड शामिल है)। – Dirk

4
find . -path "\*filename\*" -exec perl myscript.pl {} \; 

संपादित करें: भाग निकले सितारे, मार्कअप यहाँ

4
for i in $(\ls -d filenames) 
do 
    perl myscript.pl $i 
done 

'ls' कमांड के सामने बैकस्लैश अस्थायी रूप से किसी भी उपनाम निष्क्रिय करने के लिए है नहीं करना चाहता था।

HTH

1

एक लाइनर:

$ for file in filename1 filename2 filename3; do perl myscript $file; done

फ़ाइल नाम आप भी वाइल्डकार्ड का उपयोग कर सकते हैं की जगह अलग की गई सूची के बजाय

, उदाहरण के लिए:

$ for file in *.txt *.csv; do perl myscript $file; done

2

और अगर आप अपने फ़ाइल नामों में रिक्त स्थान हैं, पुराने स्टैंडबाय

का उपयोग करें
find . -maxdepth 1 -print0 | xargs -0 perl myscript.pl 
0

मैं व्यक्तिगत रूप से zsh खोल, जो आप उपनिर्देशिकाएं का एक सेट पर पुनरावर्ती एक कमांड को चलाने के लिए एक बहुत अच्छा तरीका देता है का उपयोग करें। । यह आपको फ़ाइल है, जो handly है जब लंगड़ा का उपयोग कर .wav फ़ाइलों के एमपी 3 फ़ाइलें बनाने के लिए की प्रत्यय को बदलने के लिए अनुमति देता है: **/* wav में मैं के लिए

; लंग $ i $ i: r.mp3

आप एक कमांड के आउटपुट को दूसरे पर भी पाइप कर सकते हैं, जिसे मैं अक्सर उपयोग करता हूं जब मैं कई बिटोरेंट फ़ाइलों को डाउनलोड कर रहा हूं और प्रत्येक डाउनलोड को प्रतिशत देखना चाहता हूं पूरा कर लिया है:

मैं के लिए

में **/* txt;। grep -H प्रतिशत $ i | पूंछ -1