जवाबों:
for i in *; do perl myperlscript $i ${i%.*}.txt; done
यह regex का उपयोग करता है, निश्चित रूप से।
आपको छोरों की तलाश करनी होगी। यह मार्गदर्शिका शानदार है: http://www.tldp.org/LDP/abs/html/abs-guide.html#EX22
हां, हर फाइल के लिए आप एक लूप लिख सकते हैं:
for fn in *;
do
# do something with the file names and files
# make the output filename
ofn=${fn}.txt
# run the perl thingy
perl myperscitpt.pl $fn $ofn
done
find /home/user/my/folder -type f -exec perl myperscitpt.pl "{}" "{}.txt" \;
यह कमांड एक डायरेक्टरी (और उपनिर्देशिका) के तहत सभी फाइलों को ढूंढेगा और आपकी पर्ल स्क्रिप्ट को निष्पादित करेगा।
find /home/user/my/folder -type f -iname "a*" -or -iname "b*" -or -iname "c*" -exec perl myperscitpt.pl "{}" "{}.txt" \;
यदि आप वर्तमान फ़ोल्डर को खोजना चाहते हैं तो आप /home/user/my/folder
एक डॉट के साथ स्थानापन्न कर सकते .
हैं।
{}
फ़ाइल नाम (और फ़ाइल नाम) के लिए पथ है।
\;
आवश्यक है जब आप कमांड के अंत में -exec का उपयोग करें
-type f
फ़ाइलों का अर्थ है (निर्देशिका नहीं)
-iname "a*" -or -iname "b*" -or -iname "c*"
एक या बी या सी के साथ शुरू होने वाली फ़ाइलों के लिए खोज करने का मतलब है। -iname
है केस-संवेदी , -name
केस-संवेदी है।
यह कमांड उपनिर्देशिकाओं में भी खोज करेगा । यदि आप उपखंडों में खोज नहीं करना चाहते हैं, तो आप -maxdepth
इसे सेट करें (इसे अपने कमांड में पहले तर्क के रूप में उपयोग करें):
find /home/user/my/folder -maxdepth 1 -type f -iname "a*" -or -iname "b*" -or -iname "c*" -exec perl myperscitpt.pl "{}" "{}.txt" \;
खोज बहुत सारे विकल्पों के साथ एक शक्तिशाली कमांड है, मैनुअल देखें: http://www.gnu.org/software/findutils/manual/html_mono/find.html#Finding-Files
ls ls.txt
। इसके अलावा प्रत्यय हटाने regex का उपयोग नहीं करता है यह उसी तरह का उपयोग करता है जैसे कि पथनाम विस्तार। प्रत्यय हटाने की जरूरत नहीं है। ओपी ने इसका अनुरोध नहीं किया और यह कोड को बैश पर निर्भर बनाता है। निश्चित संस्करण:for i in * ; do perl myperlscript $i $i.txt ; done